- 题目大意
有若干个由两种元素组成的简单化合物,现在把它们装进车里,如果车上有恰好有k种简单化合物并且恰好有k种元素的话,那么就会引发爆炸,所以车上的化合物必须避免满足这个条件。
- 解题思路
如果元素表示点,那么化合物就表示边,要爆炸的条件就是形成环,即为k个点k条边,那么就肯定存在环。直接用并查集判断就好了。
- 代码
#include<iostream> #include<cstdio> using namespace std; const int MAX = 1e5 + 50; int fa[MAX]; void init(int n) { for (int i = 0; i <= n; i++) fa[i] = i; } int find(int x) { if (x == fa[x]) return x; else { return fa[x] = find(fa[x]); } } int main() { int x, y; while (scanf("%d", &x) != EOF) { init(MAX); int sum = 0; while (x != -1) { scanf("%d", &y); int fx = find(x), fy = find(y); if (fx == fy) sum++; else { fa[fx] = fy; } scanf("%d", &x); } printf("%d\n", sum); } return 0; }