2524:ユビキタス宗教:宗教:互いに素なセットは、単に含まれる基地+互いに素なセットを使用し

効果の対象に

世界の多くの宗教がありますが、あなたはあなたの学校の宗教的信念に学生の何に興味があります。
あなたの学校の生徒たちが持っているN(0 <N <= 50000) 、あなたは可能性が低い、彼らは明らかに少なく喜んでいるので、一人一人の宗教的信念を依頼することです。あなたが同時に2人の学生を見つけたときしかし、彼らは同じ宗教であるかどうかを教えてくれて喜んでいる、宗教学校の数は、あなたがそのような多くの問い合わせにより見積もることができます制限されます。あなただけの最高の宗教的信念に、各学生の考えることができます。

エントリー

入力データの複数のセットを含みます。
まず各データセット含むの行nおよびmは、0 <= M <= N(N-1)/ 2、 mライン毎に続いて、2つの番号iとjを含む、私は、学生と学生J同じ宗教を示し学生は1からnまでの番号が付けられています。エンドとしてラインN = M = 0に入力されます。

アイデア解析

互いに素セットの基本的な質問

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

#define MAX 50005
int kind[MAX];

int find(int k) {
	if (k == kind[k])return k;
	else return kind[k] = find(kind[k]);
}

void unite(int x, int y) {
	kind[find(x)] = find(y);
}

int main() {
	int n, m, i = 1;
	while (cin >> n >> m && m + n > 0) {
		int res = 0;
		for (int i = 1; i <= n; i++)kind[i] = i;
		while (m--) {
			int a, b; cin >> a >> b;
			unite(a, b);
		}
		for (int i = 1; i <= n; i++) {
			if (find(i) == i) res++;
		}
		printf("Case %d: %d\n", i++, res);
	}
}

同様の質問

互いに素セットベーシスまくる
互いに素-設定高度:2つの関係を維持
互いに素セット最終体:食物連鎖

公開された186元の記事 ウォン称賛13 ビュー9302

おすすめ

転載: blog.csdn.net/csyifanZhang/article/details/105221044