A - X-Plosives (UVALive - 3644)

Posted Alpacaddhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A - X-Plosives (UVALive - 3644)相关的知识,希望对你有一定的参考价值。

- 题目大意

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

  

以上是关于A - X-Plosives (UVALive - 3644)的主要内容,如果未能解决你的问题,请参考以下文章

UVA 1160 - X-Plosives

并查集+思维——X-Plosives

[2016-03-05][UVALive][4104][MODEX]

UVALive 3989 Ladies&#39; Choice

UVALive 5741 Wealthy Family

[2016-03-19][UVALive][3971][Assemble]