UVALive - 3644 X - Plosives (및 검색 집합)

제목: UVALive - 3644 X - Plosives (병렬 집합)
제목: K 개의 간단 한 화합물 을 제시 합 니 다. 마침 K 가지 요 소 를 포함 하고 있 습 니 다. 그러면 그들 을 차 에 실 을 때 이미 받 은 화합물 을 다시 가 져 올 때 는 차 에 싣 는 것 을 거절 하고 안전 하 게 한 다음 에 차 에 실 을 화합물 목록 을 드 립 니 다. 차 에 싣 는 것 을 거절 하 는 횟수 가 필요 하 냐 고 물 었 습 니 다.
문제 풀이 사고: 그리고 집 을 찾 습 니 다.이미 설 치 된 화합물 을 기록 하면 다음 화합물 이 이미 집합 중이 라면 선적 을 거부 해 야 한 다 는 뜻 이다.
코드:
#include 
#include 

const int maxn = 1e5 + 5;
int p[maxn];

void init () {
	
	for (int i = 0; i < maxn; i++)
		p[i] = i;
}

int getParent(int a) {

	return a == p[a] ? a: p[a] = getParent (p[a]);
}

int main () {

	int a, b;
	int ans;
	while (scanf ("%d", &a) == 1) {
		ans = 0;
		init();
		do {
			scanf ("%d", &b);
			int q1 = getParent(a);
			int q2 = getParent(b);
			if (q1 == q2)
				ans++;
			else 
				p[q1] = q2;

		} while (scanf ("%d", &a) && a != -1);

		printf ("%d
", ans); } return 0; }

좋은 웹페이지 즐겨찾기