题目链接:http://poj.org/problem?id=1611
题意:有学生感染了SARS。一个学生可以加入很多小组。n个学生m个小组,每个小组有k个组内成员,后跟着k个成员的组内编号。让你求出有多少学生受到了感染。
题解:并查集板子题。就是计数那里要注意。
代码:
#include
#include
using namespace std;
const int maxn = ;
int f[maxn];
void init(int n){
for(int i = ; i < n ;i++){
f[i] = i;
}
}
int find(int x){
if(x == f[x])
return x;
return f[x] = find(f[x]);
}
void join(int a,int b){
a = find(a);
b = find(b);
if(a != b){
f[a] = b;
}
}
int a[maxn];
int main(){
int n,m,k;
while(cin>>n>>m){
if(n == && m == ){
break;
}
init(n);
for(int i = ; i < m; i++){
cin>>k;
cin>>a[];
for(int j = ; j < k ;j++){
cin>>a[j];
join(a[],a[j]);
}
}
int cnt = ;
for(int i = ;i < n; i++){
if(find(i) == f[]) //point
cnt++;
}
cout<<cnt<<endl;
}
return ;
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章