标签:c style class blog code tar
【题目大意】
SARS病毒蔓延,编号为0的人已经感染了SARS病毒,现在给你一些分组,只要和0接触过的都是可能感染的嫌疑人,问你最多可能有多少人感染了该种病毒。
【题目分析】
简单的并查集,只要将所有一组的人都合并,最后来看一下和0一样的编号,统计一下输出就可。
#include<iostream> using namespace std; int father[30001]; int find_father(int x) { if(father[x]!=x) return find_father(father[x]); return x; } int main() { int n, m; int k; int i, j; int x, y; while(cin>>n>>m) { if(n==0 && m==0) break; if(m == 0) { cout << "1\n"; continue; } for(i=0;i<=n;i++) father[i]=i; for(i=0;i<m;i++) { cin>>k; cin>>x; for(j=1;j<k;j++) { cin>>y; int p = find_father(x); int q = find_father(y); if(p!=q) father[p]=q; x = y; } } int cnt=0; int f = find_father(0); for(i=0;i<n;i++) { if(find_father(i)==f) cnt++; } cout<<cnt<<endl; } return 0; }
标签:c style class blog code tar
原文地址:http://www.cnblogs.com/acmer-jsb/p/3761686.html