并查集 LA 3644

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1645

题意理解错,TMD,   WA的哭了一下午


k种化合物如果有k种元素,会爆炸,  意思是  假设现在有n种元素,那么其中如果存在k种化合物如果有k种元素(k<=n)就不可以!!!


刘汝佳的说法还是很有意思的:元素当点,边表示化合物,那么一旦出现环,就是k种化合物如果有k种元素的情况,蛮巧妙的。


贴代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <functional>

using namespace std;

#define MAXN 100011

int father[MAXN+2];
int num;

void makeset()
{
    for(int i=0;i<=MAXN;i++)
    {
        father[i]=i;
    }
}

int Find(int x)
{
    if(x!=father[x])return father[x]=Find(father[x]);
    return x;
}

void Union(int x,int y)
{
    x=Find(x);
    y=Find(y);
    father[y]=x;
    num++;
}

int main()
{
    int a,b,t,ans,tmp;

   while(scanf("%d",&a)!=EOF)
    {
        num=0;
        t=0;
        ans=0;
        makeset();
        while(a!=-1)
        {

            scanf("%d",&b);
            //t++;
            //tmp=num;
            //int m=Find(flag);
            int n=Find(a);
            int o=Find(b);
            if(n!=o)Union(n,o);
            else
                ans++;
            scanf("%d",&a);
        }
        printf("%d\n",ans);
    }

    return 0;
}


你可能感兴趣的:(并查集 LA 3644)