poj 1611 并查集
题意:学校里有若n个学生,被分为m组,一个学生可以参加多个组,其中0号学生受到感染,求和他接触或者间接接触的人的数目
链接:点我
1 #include <stdio.h> 2 #include <algorithm> 3 #include <iostream> 4 #include <string.h> 5 using namespace std; 6 7 const int MAXN=30010; 8 int F[MAXN]; 9 int num[MAXN]; 10 int find(int x) 11 { 12 if(F[x]==-1)return x; 13 return F[x]=find(F[x]); 14 } 15 void bing(int x,int y) 16 { 17 int t1=find(x); 18 int t2=find(y); 19 if(t1!=t2) 20 { 21 F[t1]=t2; 22 num[t2]+=num[t1]; 23 } 24 } 25 int main() 26 { 27 int n,m; 28 int a,a0; 29 int i,j,k; 30 #ifndef ONLINE_JUDGE 31 freopen("1.in","r",stdin); 32 #endif 33 while(scanf("%d%d",&n,&m)!=EOF) 34 { 35 if(n==0&&m==0) break; 36 for(i=0;i<n;i++) 37 { 38 F[i]=-1; 39 num[i]=1; 40 } 41 for(i=0;i<m;i++) 42 { 43 scanf("%d",&k); 44 for(j=0;j<k;j++) 45 { 46 if(j==0) 47 { 48 scanf("%d",&a0); 49 } 50 else 51 { 52 scanf("%d",&a); 53 bing(a,a0); 54 } 55 56 } 57 } 58 printf("%d\n",num[find(0)]); 59 60 } 61 return 0; 62 }