https://www.acmicpc.net/problem/13424
[난이도] Gold4
[유형] 플로이드 와샬
[풀이]
플로이드 와샬을 이용해 각 지점간 거리를 구해놓으면 정답을 쉽게 구할 수 있습니다.
#include <cstdio>
#include <algorithm>
using namespace std;
int T,N,M,K,dist[101][101],inf=9e8,frd[101];
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++) {
for(int j=1;j<=N;j++) {
dist[i][j]=inf;
if(i==j) dist[i][j]=0;
}
}
while(M--){
int u,v,d;
scanf("%d%d%d",&u,&v,&d);
dist[v][u]=dist[u][v]=d;
}
scanf("%d",&K);
for(int i=0;i<K;i++) scanf("%d",&frd[i]);
for(int k=1;k<=N;k++){
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
dist[i][j] = min(dist[i][k]+dist[k][j],dist[i][j]);
}
}
}
int ans=inf,idx=-1;
for(int i=1;i<=N;i++){
int v=0;
for(int j=0;j<K;j++) v+=dist[i][frd[j]];
if(ans>v){
idx=i;
ans=v;
}
}
printf("%d\n",idx);
}
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/13424.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold5] 2230 : 수 고르기 (C++) (0) | 2022.01.11 |
---|---|
[BOJ/백준][Gold5] 12904 : A와 B (C++) (0) | 2022.01.11 |
[BOJ/백준][Gold4] 14925 : 목장 건설하기 (C++) (0) | 2021.12.18 |
[BOJ/백준][Gold4] 13397 : 구간 나누기 2 (C++) (0) | 2021.12.18 |
[BOJ/백준][Gold4] 16964 : DFS 스페셜 저지 (C++) (0) | 2021.12.18 |