1. 程式人生 > >How Many Tables HDU - 1213 並查集

How Many Tables HDU - 1213 並查集

基礎的並查集。

#include<stdio.h>
#include<string.h>
int f[1005],t,n,m,x,y;
void init()
{
    for(int i=1;i<=n;i++)
        f[i]=i;
    return;
}
int getf(int v)
{
    if(f[v]==v)
        return v;
    f[v]=getf(f[v]);
    return f[v];
}
void merge(int x,int y)
{
    int t1,t2;
    t1=getf(x);
    t2=getf(y);
    if
(t1!=t2) f[t2]=f[t1]; return; } int main() { int ans; scanf("%d",&t); while(t--) { ans=0; scanf("%d%d",&n,&m); init();//注意一定要讀取了n再去初始化。 for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); merge(x,y); } for
(int i=1;i<=n;i++) if(f[i]==i) ans++; printf("%d\n",ans); } return 0; }