并查集加拓扑排序

题目:点击打开链接

代码:

#include
//#include
#include
#include
#include
using namespace std;
vectorq[10010];
queueq5;
int f[10010];
struct  qq
{
    int l,r;
} e[20000];
int zhaozuxian(int a)
{
    if(f[a]==a)
        return a;
    else
    {
        f[a]=zhaozuxian(f[a]);
        return f[a];
    }
}
int  merge1(int a,int b )
{
    int t1,t2;
    t1=zhaozuxian(a);
    t2=zhaozuxian(b);
    if(t1!=t2)
    {
        f[t2]=t1;
        return 1;
    }
    else
        return 0;
}
int rudu[10010];
int main()
{
    int n,m;
    char  a[100];
    while(~scanf("%d%d",&n,&m))
    {
        getchar();
        for(int i=0; i')
            {

                e[h].l=t3;
                e[h].r=t1;
                ++h;
            }
            else  if(t2=='<')
            {

                e[h].l=t1;
                e[h].r=t3;
                ++h;
            }
            else
            {
                if(merge1(t1,t3))
                    sum--;
            }
        }

//        printf("%d\n",sum);
        for(int k=0; k0) printf("CONFLICT");
        else  if(flag==1)
            printf("UNCERTAIN");
        else
            printf("OK");

        printf("\n");

    }
    return 0;
}
这个题目就是一个拓扑排序加一个并查集,但是wrong了好多回,原因是输入,我不了解gets,所以才这么苦逼,真是太弱了,
贴一个小的知识点:gets() 和scanf()的区别在于输入的字符串是否中间有空格:对于前者,只有遇到"\n"时才停止输入,而对于后者,出现"\n"或空格都停止输入。
另外这个题也巩固了我的并查集,提升了一下拓扑,还好啊。

你可能感兴趣的:(并查集加拓扑排序)