๐ค๋ฌธ์ ์ดํด
ํ ๊ณต์ฅ์์ ๋ค๋ฅธ ๊ณต์ฅ์ผ๋ก ๊ฐ๋ ๊ฒฝ๋ก ์ค์์ ๊ทธ ๊ฒฝ๋ก ์์ ์๋ ์ค๋ ์ ํ ๊ฐ ์ค์์ ์ต์๊ฐ์ ์ฐพ๊ณ , ๊ทธ ์ต์๊ฐ ์ค ๊ฐ์ฅ ํฐ ๊ฒ์ ์ถ๋ ฅํด์ฃผ๋ ๋ฌธ์ ์ด๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
DFS๋ฅผ ํตํด ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํด์ ๊ทธ ๊ฒฝ๋ก์ ๊ฐ์ฅ ์์ ์ค๋์ ํ ๊ฐ์ ์ ์ฅํ๊ณ ๊ทธ ๊ฐ๋ค๋ผ๋ฆฌ ๋น๊ตํด์ ์ ค ํฐ ๊ฐ์ ์ฐพ์์ฃผ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
โ์ฒซ๋ฒ์งธ ์ ์ถ
์ฌ์ด 1๋ง๊ฐ, ๋๋ก๊ฐ 10๋ง๊ฐ๋ก 10์ต๋ฒ์ ๋ค ๋๊ฒ ๋๋ ์ฒซ๋ฒ์งธ ์์ด๋์ด ๋ฐฉ๋ฒ์ผ๋ก๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
๐ก๋๋ฒ์งธ ์์ด๋์ด
์๊ฐ์ด๊ณผ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผํ ์ง ๋ง๋งํด์ ์ง๋ฌธ์ ํ๋ค. ๋ฌธ์ ์์ ๋์์๋ฏ ์ง์ ๋ฌด๊ฒ๋ณด๋ค ์ค๋์ ํ์ด ์์ ๋ค๋ฆฌ๋ฅผ ์ง๋๊ฐ๋ ค๋ ๊ฒฝ์ฐ์ ๋ค๋ฆฌ๊ฐ ๋ฌด๋์ง๋ค๊ณ ํ๋ค. ์ด ์ ์ ํ์ฉํด์ ์ด๋ถํ์์ ์ด์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด์ฃผ๋ฉด 1์ด ์์ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
๐ฅํ์ด๐ฅ
DFS + ์ด๋ถํ์
๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ ํ์ ์์ด ์ค๋ ์ ํ๊ฐ์ ๋์ด๊ฐ์ง ์๋ ๊ฒฝ๋ก๋ง ์ฐพ์์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊น์ด ์ฐ์ ํ์์ ์ด์ฉํ๋ค.
์ค๋ ์ ํ ๊ฐ์ ์ด๋ถํ์์ผ๋ก /2์ฉ ์ค์ฌ๊ฐ๋ฉด์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ค๋ค.
โํธ๋ฌ๋ธ ์ํ
dfs๋ฅผ ์ฌ๊ทํธ์ถํ ๋ ๋ค์ ์ฌ, limit์ ๋๊ฒจ์ค์ผ ํ๋๋ฐ ์ฒซ๋ฒ์งธ ์์ด๋์ด์์ ์ฌ์ฉํ๋ dfs์ ์ต๊ด(?)์ด ๋จ์์ limit์๋ฆฌ์ ๋ค์ ์ฌ์ ์ค๋์ ํ ๊ฐ์ ๋๊ฒจ์ฃผ๋ ์ค์๋ฅผ ํ๋ค.
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
vector<vector<pair<int, int>>> v;
bool visited[10002];
int n, m, a, b, c;
bool dfs(int now, int limit) {
visited[now] = true;
if (now == b) return true;
for (auto x: v[now]) {
int next = x.first;
int cost = x.second;
if (!visited[next] && limit <= cost) {
if (!dfs(next, limit))continue;
else return true;
}
}
return false;
}
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n >> m;
v.resize(n + 2);
for (int i = 0; i < m; i++) {
cin >> a >> b >> c;
v[a].push_back({b, c});
v[b].push_back({a, c});
}
cin >> a >> b;
int left = 0;
int right = 1000000000;
int mid, ans;
while (left <= right) {
memset(visited, false, sizeof(visited));
mid = (left + right) / 2;
if (dfs(a, mid)) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
cout << ans;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 5021๋ฒ ์์๊ณ์น (0) | 2022.07.18 |
---|---|
[๋ฐฑ์ค/C++] 11057๋ฒ ์ค๋ฅด๋ง ์ (0) | 2022.07.18 |
[๋ฐฑ์ค/C++] 14716๋ฒ ํ์๋ง (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 1149๋ฒ RGB๊ฑฐ๋ฆฌ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2022.07.16 |