두 노드가 주어졌을 때 두 노드 사이의 거리 구하기
#include <bits/stdc++.h>
using namespace std;
int n, m, u, v, d;
vector<pair<int,int>> adj[1005];
bool vis[1005];
int dfs(int st, int des, int dis){
vis[st] = true;
if (st == des) return dis;
for(auto nxt : adj[st]){
if (vis[nxt.first]) continue;
int result = dfs(nxt.first, des, dis + nxt.second);
if (result != -1) return result;
}
return -1;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i = 0; i < n-1; i++){
cin >> u >> v >> d;
adj[u].push_back({v,d});
adj[v].push_back({u,d});
}
for(int i = 0; i < m; i++){
cin >> u >> v;
fill(vis,vis+1005,false);
cout << dfs(u,v,0) << '\n';
}
}
return -1;
// Authored by : heheHwang
// Co-authored by : -
// http://boj.kr/dc926ebf7eb54c308dea376b240e0591
while (M--) {
cin >> u >> v;
queue<pair<int, int>> q;
vector<bool> vis(N + 1);
q.push({u, 0});
vis[u] = true;
while (!q.empty()) {
auto [cur, dist] = q.front();
q.pop();
if (cur == v) {
cout << dist << '\n';
break;
}
for (auto [nxt, nxtDist] : adj[cur]) {
if (vis[nxt]) continue;
vis[nxt] = true;
q.push({nxt, dist + nxtDist});
}
}