标签:hdu1213 杭电1213 how many tables
2 5 3 1 2 2 3 4 5 5 1 2 5
2 4
最近在专攻并查集的题目,读完第一段就基本确认又是一个并查集。。。分析过程就不给了,英文还过关的话读一遍就能懂。
AC代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std ;
int f[1005] ;
int t,m,n ;
int x,y ;
void init()
{
for(int i = 1 ;i<=n ;i++)
{
f[i] = i ;
}
}
int getRoot(int v)
{
if(f[v] == v)
return v ;
else
{
f[v] = getRoot(f[v]) ;
return f[v] ;
}
}
void merge(int v,int u)
{
int t1 = getRoot(v) ;
int t2 = getRoot(u) ;
if(t1 != t2)
{
f[t2] = t1 ;
}
}
int main()
{
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%d%d",&n,&m) ;
init() ;
for(int i = 0 ;i<m ;i++)
{
scanf("%d%d",&x,&y) ;
merge(x,y) ;
}
int sum = 0 ;
for(int i = 1 ;i<=n ;i++)
{
if(f[i] ==i)
sum++ ;
}
printf("%d\n",sum) ;
}
}
return 0 ;
}
hdu 1213 How Many Tables(并查集的简单应用)
标签:hdu1213 杭电1213 how many tables
原文地址:http://blog.csdn.net/u012566693/article/details/44899677