1. 程式人生 > >A - X-Plosives (UVALive - 3644)

A - X-Plosives (UVALive - 3644)

iostream max 並且 eof bsp true using i++ return

- 題目大意

有若幹個由兩種元素組成的簡單化合物,現在把它們裝進車裏,如果車上有恰好有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)