-------------------------------
建三个并查集空间太大了,应该写加权并查集
-------------------------------
这道题的关系是个环,转过来转过去的。我们的权值就定义成这个点与父节点的关系(0=同类,1=吃
2=被吃)
------------------------------
这样做,我们就要在find时如果搞路径压缩,就要麻烦一点,因为我们要把他与父节点的关系更新成与
祖先节点的关系。
非常易证得,关系就是与父节点的关系+与祖先节点的关系的和mod3的值(因为递归的原因,这个祖先节点最多就是父节点的父节点)
int find(int x){ if(x!=f[x]) { int xx=f[x]; f[x]=find(f[x]); g[x]=(g[x]+g[xx])%3; } return f[x]; }