poj 1611 并查集
来源:互联网 发布:记忆力训练软件手机 编辑:程序博客网 时间:2024/05/23 23:48
#include<stdio.h>
#define M 30005
int father[M];
int num[M];
int find(int v)
{
if(father[v]==v)
return v;
father[v]=find(father[v]);
return father[v];
}
void Union(int u,int v)
{
int x=find(v);
int y=find(u);
if(x!=y)
{
father[x]=y;
num[y]+=num[x];
}
}
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
for(i=0;i<n;i++)
{
father[i]=i;
num[i]=1;
}
for(i=0;i<m;i++)
{
int k,first,t;
scanf("%d%d",&k,&first);
for(j=1;j<k;j++)
{
scanf("%d",&t);
Union(first,t);
}
}
printf("%d\n",num[ find(0) ]);
}
return 0;
}
#define M 30005
int father[M];
int num[M];
int find(int v)
{
if(father[v]==v)
return v;
father[v]=find(father[v]);
return father[v];
}
void Union(int u,int v)
{
int x=find(v);
int y=find(u);
if(x!=y)
{
father[x]=y;
num[y]+=num[x];
}
}
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
for(i=0;i<n;i++)
{
father[i]=i;
num[i]=1;
}
for(i=0;i<m;i++)
{
int k,first,t;
scanf("%d%d",&k,&first);
for(j=1;j<k;j++)
{
scanf("%d",&t);
Union(first,t);
}
}
printf("%d\n",num[ find(0) ]);
}
return 0;
}
- 并查集 POJ 1611
- 【并查集】POJ-1611
- poj 1611(并查集)
- poj 1611 并查集
- poj 1611 并查集
- 【POJ 1611 并查集】
- poj 1611 并查集
- poj 1611(并查集)
- poj-1611 并查集
- POJ 1611 并查集
- poj 1611 并查集
- POJ 1611 (并查集)
- POJ 1611 <并查集>
- poj 1611 并查集
- 并查集 POJ 1611
- POJ 1611 (并查集)
- Poj 并查集
- poj并查集
- 电影中的数学
- 最长回文子串
- POJ 3468 经典线段树
- 优先队列
- 弄了一个下午的o-blog和github博客,还是用现成的吧。。
- poj 1611 并查集
- poj 3264 RMQ 最小值 最大值
- Android Camera的代码结构
- POJ 3041 二分图匹配
- 求数组中最长递增子序列
- IO操作 通过字符数组进行读取
- 走出“码农”,迈入高端的最佳捷径——执行力
- 找出两个单链表里交叉的第一个元素
- zlib库剖析(3):使用示例zpipe.c