题目链接:
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;
}