【POJ】1611 The Suspects
题目链接:http://poj.org/problem?id=1611
题意:有学生感染了SARS。一个学生可以加入很多小组。n个学生m个小组,每个小组有k个组内成员,后跟着k个成员的组内编号。让你求出有多少学生受到了感染。
题解:并查集板子题。就是计数那里要注意。
代码:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 const int maxn = 30010; 5 6 int f[maxn]; 7 8 void init(int n){ 9 for(int i = 0; i < n ;i++){ 10 f[i] = i; 11 } 12 } 13 14 int find(int x){ 15 if(x == f[x]) 16 return x; 17 return f[x] = find(f[x]); 18 } 19 20 void join(int a,int b){ 21 a = find(a); 22 b = find(b); 23 if(a != b){ 24 f[a] = b; 25 } 26 } 27 28 int a[maxn]; 29 int main(){ 30 int n,m,k; 31 while(cin>>n>>m){ 32 if(n == 0 && m == 0){ 33 break; 34 } 35 init(n); 36 for(int i = 0; i < m; i++){ 37 cin>>k; 38 cin>>a[0]; 39 for(int j = 1; j < k ;j++){ 40 cin>>a[j]; 41 join(a[0],a[j]); 42 } 43 } 44 int cnt = 0; 45 for(int i = 0 ;i < n; i++){ 46 if(find(i) == f[0]) //point 47 cnt++; 48 } 49 cout<<cnt<<endl; 50 } 51 52 return 0; 53 }