A

- 题目大意

    有若干个由两种元素组成的简单化合物,现在把它们装进车里,如果车上有恰好有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
", sum);
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/alpacadh/p/8449424.html