๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 1240๋ฒˆ - ๋…ธ๋“œ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ

by ์•ˆ์ฃผํ˜• 2022. 3. 8.

๋ฌธ์ œ

 

1240๋ฒˆ: ๋…ธ๋“œ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ

N(2≤N≤1,000)๊ฐœ์˜ ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง€๊ณ  M(M≤1,000)๊ฐœ์˜ ๋‘ ๋…ธ๋“œ ์Œ์„ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ๋‘ ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <memory.h>


#define MAX 1e9
using namespace std;


int N,M;
vector<pair<int,int>>graph[1001];
int visited[1001];

int ans;

void dfs(int x, int y, int dist){
    visited[x]=1;
    
    if(x==y){
        ans = dist;
        return;
    }
    
    for(int i=0; i<graph[x].size(); i++){
        int cost = dist + graph[x][i].second;
        int next_node = graph[x][i].first;
        if(visited[next_node]) continue;
        visited[next_node]=1;
        dfs(graph[x][i].first, y, cost) ;
    }
}


int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>N>>M;
    
    for(int i=0; i<N-1; i++){
        int a,b,dist; cin>>a>>b>>dist;
        graph[a].push_back({b,dist});
        graph[b].push_back({a,dist});
    }
    
    
    for(int i=0; i<M; i++){
        int a,b; cin>>a>>b;
        dfs(a,b,0);
        memset(visited,0,sizeof(visited));
        cout<<ans<<'\n';
    }
    
}

 

ํ’€์ด

์–‘๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ๋ณ„๋กœ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— dfs๋ฅผ ํ†ตํ•ด์„œ ์ •์ ์„ ํŒŒ๋„ํƒ€๊ธฐ ํ•˜๋“ฏ์ด ํƒ€๊ณ  ํƒ€๊ณ  ๋“ค์–ด๊ฐ€์—ฌ ๋„์ฐฉ ๋…ธ๋“œ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€