hdu 1269 這題有毒

用並查集寫的
題目有毒 n=1,m=0都能輸入,簡直了

#include<stdio.h>
#include<string.h>
int pre_forward[100010],pre_back[100010];
int n,m;
int find1(int a)
{
    int r=a;
    while(r!=pre_forward[r])
    {
        r=pre_forward[r];
    }
    return r;
}
int find2(int a)
{
    int r=a;
    while(r!=pre_back[r])
    {
        r=pre_back[r];
    }
    return r;
}
void create(int a,int b)
{
    if(a!=n)
    {
        int fa=find1(a),fb=find1(b);
        if(fa!=fb)
            pre_forward[a]=b;
    }
    if(b!=n)
    {
        int fa=find2(a),fb=find2(b);
        if(fa!=fb)
            pre_back[b]=a;
    }
}
int main()
{
     while (scanf("%d%d",&n,&m),n||m)
    {
        int i,flag=1;
        for(i=0;i<=n;i++)
        {
            pre_forward[i]=pre_back[i]=i;
        }
        for (i=1;i<=m;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            create(a,b);
        }
        for(i=1;i<=n;i++)
        {
            if(find1(i)!=n||find2(i)!=n)
            {
                flag=0;
                break;
            }
        }
        if(flag)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}
發佈了44 篇原創文章 · 獲贊 3 · 訪問量 7978
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章