更新dota2的时候水了一题...好水
#include <stdio.h> int pre[300005]; int n,m; int find(int i) { int j=i,temp; while (pre[i]!=i) i=pre[i]; while (j!=i) { temp=pre[j];//先记录下下一个长官 pre[j]=i;//统一都更新为i的手下 j=temp;//迭代 } return i; } void merge(int b,int c) { int t1,t2; t1=find(b); t2=find(c); if (t1!=t2) pre[t2]=t1; return; } int main() { int i,j,c,d,k,sum; while((scanf("%d%d",&n,&m)==2)&&(n||m)) { for (i=0;i<n;i++) pre[i]=i; for (i=1;i<=m;i++) { scanf("%d%d",&k,&d); for (j=1;j<k;j++) { scanf("%d",&c); merge(c,d); } } c=find(0); sum=1; for (i=1;i<n;i++) if (find(i)==c) sum++; printf("%d\n",sum); } return 0; }