1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 6 int n,m,k,t; 7 int a[30001],s[30001]; //s[]储存输入的,a[]用来找爸爸!! 8 9 int getf(int u) 10 { 11 return u==a[u]? u:getf(a[u]); 12 } 13 void merge(int x,int y) 14 { 15 x=getf(x); 16 y=getf(y); 17 if(x!=y) 18 { 19 a[max(x,y)]=min(x,y); //x,y的大小要比较一下,,这里为了少打代码 直接写了 20 } 21 } 22 int main() 23 { 24 while(cin>>n>>m) 25 { 26 if(n==0&&m==0) break; 27 for(int i=0;i<n;i++) 28 a[i]=i; //初始化 29 memset(s,0,sizeof(s)); 30 for(int i=0;i<m;i++) 31 { 32 cin>>t; 33 for(int i=0;i<t;i++) 34 cin>>s[i]; 35 for(int i=1;i<t;i++) 36 merge(s[i-1],s[i]); //只要相邻两个人查一下关系, 任何一个人的身份都能确认 37 } 38 int cnt=1; //原来 0的人本身就是一个嫌疑人 39 for(int i=1;i<n;i++) 40 if(getf(i)==getf(0)) // 如果是和嫌疑人0有接触过的人 41 cnt++; 42 cout<<cnt<<endl; 43 } 44 }
The Suspects 并查集
猜你喜欢
转载自www.cnblogs.com/thunder-110/p/9021278.html
今日推荐
周排行