POJ 1611 The Suspects(二)

2014-11-24 08:48:12 · 作者: · 浏览: 1
y=find(y);
a[x]=y;
}
正确的代码、
[cpp]
#include
#include
using namespace std;
int a[31000];
int b[31000];
bool status[31000];
int main()
{
void build(int x,int y);
int find (int x);
int i,j,n,m,s,t,key,k,tag;
int x,y,sum;
while(cin>>n>>m)
{
if(!n&&!m)
{
break;
}
for(i=1;i<=n+m;i++)
{
a[i]=i;
}
memset(status,true,sizeof(status));
tag=0;
for(i=1;i<=m;i++)
{
cin>>s;
for(j=1;j<=s;j++)
{
cin>>x;
if(status[x+1]==true)
{
b[tag++]=x+1+m;
status[x+1]=false;
}
build(x+1+m,i);
}
}
k=find(1+m);
sum=1;
for(i=0;i<=tag-1;i++)
{
key=find(b[i]);
if(b[i]==1+m)
{
continue;
}
if(key==k)
{
sum++;
}
}
cout<
}
return 0;
}
int find(int x)
{
int k1,k2;
k1=x;
while(a[x]!=x)
{
x=a[x];
}
while(k1!=a[k1])
{
k2=a[k1]; a[k1]=x;
k1=k2;
}
return x;
}
void build(int x,int y)
{
x=find(x); y=find(y);
a[x]=y;
}