版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/47730831

题目链接:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3601

题意:
每次给定一个两个元素a,b组成的化合物,如果车上有k个化合物,又包含了k个元素,就会形成爆炸物,所以每次装上去前要检查一下,输入一些化合物,求不能装的个数

代码:

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <queue>
#include <stack>
#include <map>

using namespace std;

int fa[1000010];

int fd(int x)
{
    if (fa[x] == -1) return x;
    else return fa[x] = fd(fa[x]);
}

int main()
{
    int a, b;
    while (~scanf("%d", &a))
    {
        memset(fa, -1, sizeof(fa));
        int ans = 0;
        while (a != -1)
        {
            scanf("%d", &b);
            int aa = fd(a);
            int bb = fd(b);
            if (aa == bb) ans++;
            else fa[aa] = bb;
            scanf("%d",&a);
        }
        printf("%d\n", ans);
    }
    return 0;
}