백준 1939번, 중량제한 풀이
2021. 1. 7. 13:53ㆍProblem Solving/백준
문제
풀이
옮길 수 있는 물건의 중량은 이어진 다리의 가중치 중 최솟값이 됩니다.
그러므로 가중치가 큰 간선(다리)을 이어주면서 공장끼리 이동 가능한지 확인하면 됩니다.
이 과정은 유사 크루스칼 알고리즘(Union-Find)을 돌리는 것으로 해결할 수 있습니다.
소스코드
#include <bits/stdc++.h>
#define all(v) v.begin(), v.end()
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef unordered_map<int, int> mpii;
int UF[100001];
int find(int a) {
return UF[a] = a == UF[a] ? a : find(UF[a]);
}
void merge(int a, int b) {
a = find(a), b = find(b);
if (a != b) UF[a] = b;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, m; cin >> n >> m;
vector<pair<int, pii>> vec(m);
for (auto &[a, b] : vec) cin >> b.first >> b.second >> a;
sort(all(vec), greater<>());
for (int i = 1; i <= n; i++) UF[i] = i;
int x, y; cin >> x >> y;
for (const auto &[w, a] : vec) {
merge(a.first, a.second);
if (find(x) == find(y)) {
cout << w;
return 0;
}
}
}
'Problem Solving > 백준' 카테고리의 다른 글
백준 1943번, 동전 분배 풀이 (0) | 2021.01.11 |
---|---|
백준 1823번, 수확 풀이 (0) | 2021.01.09 |
백준 2170번, 선 긋기 풀이 (0) | 2020.12.30 |
백준 4913번, 페르마의 크리스마스 정리 풀이 (0) | 2020.12.26 |
백준 14621번, 나만 안되는 연애 풀이 (0) | 2020.12.25 |