这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int fa[1001],n,k;
struct node{
int u,v,next;
};
node way[4001];
int st[1001],tot=0;
int p[1001],pp[1001];
int add(int x,int y)
{
tot++;
way[tot].u=x;
way[tot].v=y;
way[tot].next=st[x];
st[x]=tot;
return 0;
}
int find(int x)
{
if (fa[x]!=x)
fa[x]=find(fa[x]);
return fa[x];
}
int unionn(int r1,int r2)
{
fa[r1]=r2;
return 0;
}
int doit()
{
int i,j;
for (i=n-1;i>=1;i--)
{
pp[i]=1;
for (j=st[i];j;j=way[j].next)
{
if (pp[way[j].v])
{
int r1=find(way[j].u);
int r2=find(way[j].v);
if (r1!=r2)
{
unionn(r1,r2);
p[r1]+=p[r2];
p[r2]=p[r1];
}
}
}
if (p[find(i)]>(n+1)/2)
{
printf("%d",i);
return 0;
}
}
return 0;
}
int main()
{
scanf("%d",&n);
memset(pp,0,sizeof(pp));
pp[n]=1;
for (int i=1;i<=n;i++)
{
scanf("%d",&k);
fa[i]=i;
p[i]=1;
for (int j=1;j<=k;j++)
{
int x;
scanf("%d",&x);
add(i,x);
}
}
doit();
return 0;
}