반응형

https://www.acmicpc.net/problem/16562

 

16562번: 친구비

첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. (

www.acmicpc.net

 

먼저 유니온파인드로 같은 친구 그룹을 묶어줍니다.

이 때, 비용이 더 저렴한 친구를 자신의 부모 노드로 설정해줍니다.

모든 친구의 부모 노드를 검사하면서, 자신이 최상위 루트인 친구를 사귀기 위한 비용을 더해줍니다.

 

#include <cstdio>

int n, m, k, a, b, ans = 0;
int cost[10001];
int p[10001];

int findParent(int x) {
	if (p[x] == x) return x;
	else return p[x] = findParent(p[x]);
}

int main() {
	scanf("%d %d %d", &n, &m, &k);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &cost[i]);
		p[i] = i;
	}
	while (m--) {
		scanf("%d %d", &a, &b);
		int pa = findParent(a);
		int pb = findParent(b);
		if (pa != pb) {
			if (cost[pa] < cost[pb]) p[pb] = pa;
			else p[pa] = pb;
		}
	}
	for (int i = 1; i <= n; i++) {
		if (p[i] == i) ans += cost[i];
	}
	if (ans <= k) printf("%d", ans);
	else printf("Oh no");
}
반응형

'Algorithm' 카테고리의 다른 글

백준 15922 : 아우으 우아으이야!!  (0) 2021.11.17
백준 1726 : 로봇  (0) 2021.11.17
백준 2458 : 키 순서  (0) 2021.11.17
백준 1941 : 소문난 칠공주  (0) 2021.11.17
백준 2688 : 줄어들지 않아  (0) 2021.11.17

+ Recent posts