hdu1829并查集基础

#include<stdio.h>
#include<iostream>
using namespace std;
#define maxn 2005
int f[maxn], l[maxn];
int find(int x)
{
    return x-f[x] ? f[x]=find(f[x]) : x ;
}
int merge(int u, int v)
{
    int pu=find(u);
    int pv=find(v);
    if(pu!=pv)
    {
        if(l[u]==u) l[u]=v;
        if(l[v]==v) l[v]=u;
        f[find(l[u])]=pv;
        f[find(l[v])]=pu;
        return 0;
    }
    return 1;
}

int main()
{
    int n,m,u,v,flag,t;
    scanf("%d", &t);
    for(int k=1; k<=t; k++)
    {
        scanf("%d%d", &n, &m);
        for(int i=1; i<=n; i++)
        {
            f[i]=l[i]=i;
        }
        flag=0;
        while(m--)
        {
            scanf("%d%d", &u, &v);
            if(!flag && merge(u,v))
            flag=1;
        }
        if(flag) printf("Scenario #%d:\nSuspicious bugs found!\n\n", k);
        else printf("Scenario #%d:\nNo suspicious bugs found!\n\n", k);
    }
    return 0;
}

 

posted @ 2013-06-05 12:31  临江仙1579  阅读(73)  评论(0)    收藏  举报