HDU 1213 How Many Tables 并查集
2014-07-29 14:41
393 查看
这是一道简单的并查集的题目,跟UVA 10608 Friends
差不多。
对于统计桌子的数目,我用了两种方法:
1、先将桌子数目初始化为n,然后合并一次就减一张。
<span style="font-size:14px;">#include<stdio.h>
int fa[1001];
int find(int u)
{
fa[u]==u?u:fa[u]=find(fa[u]);
return fa[u];
}
int main()
{
int i,n,m,t,x,y,u,v,k;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
k=n;
for (i=1;i<=n;i++) fa[i]=i;
for (i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
x=find(u);y=find(v);
if (x!=y) {fa[x]=y;k--;}
}
printf("%d\n",k);
}
return 0;
}</span>
2、先将朋友们分好组,在统计 fa[i]=i 的这些根节点有多少即为所求的桌子数。
#include<stdio.h>
int fa[1001];
int find(int u)
{
fa[u]==u?u:fa[u]=find(fa[u]);
return fa[u];
}
int main()
{
int i,n,m,t,x,y,u,v,k;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) fa[i]=i;
while (m--)
{
scanf("%d%d",&u,&v);
x=find(u);y=find(v);
if (x!=y) fa[x]=y;
}
k=0;
for(i=1;i<=n;i++)
if (find(i)==i) k++;
printf("%d\n",k);
}
return 0;
}
差不多。
对于统计桌子的数目,我用了两种方法:
1、先将桌子数目初始化为n,然后合并一次就减一张。
<span style="font-size:14px;">#include<stdio.h>
int fa[1001];
int find(int u)
{
fa[u]==u?u:fa[u]=find(fa[u]);
return fa[u];
}
int main()
{
int i,n,m,t,x,y,u,v,k;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
k=n;
for (i=1;i<=n;i++) fa[i]=i;
for (i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
x=find(u);y=find(v);
if (x!=y) {fa[x]=y;k--;}
}
printf("%d\n",k);
}
return 0;
}</span>
2、先将朋友们分好组,在统计 fa[i]=i 的这些根节点有多少即为所求的桌子数。
#include<stdio.h>
int fa[1001];
int find(int u)
{
fa[u]==u?u:fa[u]=find(fa[u]);
return fa[u];
}
int main()
{
int i,n,m,t,x,y,u,v,k;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) fa[i]=i;
while (m--)
{
scanf("%d%d",&u,&v);
x=find(u);y=find(v);
if (x!=y) fa[x]=y;
}
k=0;
for(i=1;i<=n;i++)
if (find(i)==i) k++;
printf("%d\n",k);
}
return 0;
}
相关文章推荐
- HDU 1213 How Many Tables? (简单并查集)
- hdu 1213 How Many Tables(并查集)
- hdu 1213 How Many Tables(并查集)
- HDU 1213 How Many Tables(并查集,认识的朋友做一块)
- HDU 1213 How Many Tables(并查集)
- HDU 1213 How Many Tables 并查集
- HDU-1213-How Many Tables [并查集]
- HDU 1213 How Many Tables (简单的并查集)
- HDU-1213-How Many Tables(并查集)
- HDU 1213 How Many Tables 并查集
- hdu 1213 How Many Tables(并查集求无向图有几个连通分量)
- HDU-#1213 How Many Tables (并查集)
- hdu 1213 How Many Tables(并查集)
- HDU 1213 How Many Tables(并查集)
- hdu 1213 How Many Tables(并查集)
- HDU 1213 How Many Tables(并查集)
- 【HDU】-1213-How Many Tables(并查集)
- HDU 1213 How Many Tables(并查集讲解)
- HDU 1213 How Many Tables(并查集)
- hdu 1213 (How Many Tables)(简单的并查集,纯模板)