The Suspects
題意:
本題的感染者,肯定是有0的連通塊
思路:
先合併,之後再求出 find(0)----即找到0的祖先(0所在的連通塊)
- fa=find(0);
- 之後看fa這個連通快有多少個元素。
反思:
- 輸入小心啊,沒注意continue,3wa,qwq。
- 並查集就常規來,別瞎搞。qwq。
AC(模板)
#include <iostream>
#include <cstdio>
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
const int maxn=3e4+10;
int f[maxn];
int find(int x)
{
if(x==f[x])return x;
return f[x]=find(f[x]);
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)&&(n|m))
{
For(i,0,n-1)f[i]=i;
// cout<<"ok"<<endl;
// cout<<"n="<<n<<endl;
//cout<<"m="<<m<<endl;
For(i,1,m)
{
int k,x,pre;
scanf("%d",&k);
scanf("%d", &pre);
if(k==1)continue;
For(j,2,k)
{
scanf("%d", &x);
int A=find(pre),B=find(x);
if(A!=B)f[B]=A;
}
}
int fa=find(0),ans=0;
For(i,0,n-1)
{
if(find(i)==fa)ans++;
// cout<<f[i]<<" ";
}
//cout<<endl;
printf("%d\n",ans);
}
return 0;
}