-
[15971] 두 로봇BOJ 2021. 11. 9. 12:03
https://www.acmicpc.net/problem/15971
15971번: 두 로봇
2018년 강원도에서 새로운 동굴이 발견되었다. 이 동굴에는 총 N개의 넓은 방이 존재하며 좁은 통로로 서로 연결되어 있는 것으로 밝혀졌다. N개의 방은 1번부터 N번까지의 번호를 붙여 1번 방, 2번
www.acmicpc.net
<문제>
하나의 로봇에서 다른 로봇까지의 최단경로를 찾았다고 생각해보자
로봇이 하나의 간선을 사이로 두는것이 종료조건이라면, 해당 간선은 지나갈 필요가 없으니
결국 가장 거리가 먼 간선을 사이에 두는것이 항상 최적이다.
bfs를 이용해 해당 경로를 전부 누적하며, 도착하면 경로에 포함된 간선중 가장 큰것을 빼주면 된다.
<소스코드>
12345678910111213141516171819202122232425262728293031323334353637#include <bits/stdc++.h>using namespace std;typedef struct {int node, sum, mx;} state;queue<state> q;vector<pair<int, int>> adj[100001];int n, s, e;bool visited[100001];int main(void) {cin >> n >> s >> e;int i;for (i = 0; i < n - 1; i++) {int a, b, c;cin >> a >> b >> c;adj[a].push_back({b, c});adj[b].push_back({a, c});}q.push({s, 0, 0});visited[s] = true;while (!q.empty()) {state cur = q.front();q.pop();if (cur.node == e) {cout << cur.sum - cur.mx;return 0;}for (auto& next : adj[cur.node]) {if (visited[next.first] == false) {visited[next.first] = true;q.push({next.first, cur.sum + next.second,max(cur.mx, next.second)});}}}return 0;}cs 'BOJ' 카테고리의 다른 글
[16973] 직사각형 탈출 (0) 2021.11.09 [14940] 쉬운 최단거리 (0) 2021.11.09 [17836] 공주님을 구해라! (0) 2021.11.09 [2194] 유닛 이동시키기 (0) 2021.11.08 [4781] 사탕 가게 (0) 2021.11.07