并查集水题
#includeusing namespace std;const int maxn=50010;int tot,m,n;struct node{ int rank; int data; int parent;}t[maxn];void init(){ for(int i=1;i<=n;i++) { t[i].data=i; t[i].rank=1; t[i].parent=i; }}int find(int p){ if(p!=t[p].parent) t[p].parent=find(t[p].parent);//路径压缩 return t[p].parent;//易错点}void Union(int x,int y){ int xp=find(x); int yp=find(y); if(xp!=yp) { if(t[xp].rank >n>>m&&!(n==0&&m==0)) { init(); amount++; tot=n; for(int i=0;i >x>>y; Union(x,y); } cout<<"Case "< <<": "< <