POJ 1611---The Suspects(并查集)
题意:0疑似有传染病,和0在一起的都疑似被传染(这些人也会传染别人),求有多少个人可能有传染病; 直接代码+注释 (16ms) 1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 using namespace std; 5 6 const int maxn=20000000; 7 int par[maxn],m,n; 8 9 int find(int x) 10 { 11 if(x!=par[x]) 12 par[x]=find(par[x]); 13 return par[x]; 14 } 15 16 void unionn(int a,int b) 17 { 18 int fa=find(a); 19 int fb=find(b); 20 if(par[fb]!=fb) par[fa]=fb; //如果fb不是头 fa并入fb即头为fb 21 else par[fb]=fa; //如果fb是头 fb并入fa 22 } 23 24 int main() 25 { 26 while(scanf("%d%d",&n,&m)&&(m||n)){ 27 int p,a,b; 28 for(int i=0;i<=n;i++){ 29 par[i]=i; //每个人的头为自己 30 } 31 while(m--)