#include<iostream> using namespace std; const int M=3; int a[N]; //a[i]表示与父节点 int r[N]; //r[i]表示与父节点之间的关系,每次更新r[i]伴随着a[i]的改变 int find(int i) { if(i==a[i]) return i; int t=i; while(i!=a[i]){ r[t]=(r[t]+r[a[i]])%M; i=a[i]; } a[t]=i; return i; } int find(int x){ //无路径压缩版 if (father[x]!=x) father[x]=find(father[x]); return father[x]; }