풀이
루트부터 내려가서 자식들을 끊는 게 좋을지 부모를 끊는 게 좋을지 봐보자.
코드
#include <cstdio>
#include <vector>
using namespace std;
struct edg { int idx, dst; };
vector<edg> gph[1001];
int dfs(int prv, int now, int dst) {
int ret = 0;
for (edg nxt : gph[now]) if (prv != nxt.idx)
ret += dfs(now, nxt.idx, nxt.dst);
if (!ret) ret = dst;
return ret < dst ? ret : dst;
}
int main() {
int tc, n, m;
for (scanf("%d", &tc); tc--;) {
scanf("%d %d", &n, &m);
for (int i = 0, u, v, w; i < m; i++) {
scanf("%d %d %d", &u, &v, &w);
gph[u].push_back({ v,w });
gph[v].push_back({ u,w });
}
printf("%d\n", m ? dfs(0, 1, 1e9) : 0);
for (int i = 0; i <= n; i++) gph[i].resize(0);
}
return 0;
}
아무말
백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이