其实呢,遇到SARS呢,大家还是尽量少出门活动的,在家干什么呢,A题吧!~
言归正传,这个题是一个并查集使用的题,本应很简单的,但是这个题我一直WA一直WA。。。
本着科学严谨的态度,终于发现自己在最后判断的时候,把判断的条件搞错了,应该是比较函数的,
我却比较成了father数组,无奈啊
好了,直接代码吧
#include <iostream>
using namespace std;
int father[30005],num[30005];
/*int search_father(int tar)
{
int result=tar;
while(result!=father[result])
{
result=father[result];
}
return result;
}
*/
int search_father(int x)
{
if(father[x]==x)
return x;
else
return father[x]=search_father(father[x]);
}
void Union(int a,int b)
{
int fx=search_father(a);
int fy=search_father(b);
//if(fx!=fy)
father[fx]=fy;
}
int main()
{
int n,m,nn;
while(cin>>n>>m&&(n||m))
{
for(int i=0;i<n;i++)
father[i]=i;
while(m--)
{
cin>>nn;
for(int i=0;i<nn;i++)
cin>>num[i];
for(int i=1;i<nn;i++)
Union(num[i-1],num[i]);
}
int ans=0;
for(int i=0;i<n;i++)
{
if(search_father(i)==search_father(0))
ans++;
}
cout<<ans<<endl;
}
return 0;
}