728x90
반응형
https://www.acmicpc.net/problem/21940
#include <iostream>
#include <vector>
#define INF 987654321
using namespace std;
int graph[201][201];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(i == j) graph[i][j] == 0;
else graph[i][j] = INF;
}
}
for(int i = 0; i < m; i++){
int a, b, t;
cin >> a >> b >> t;
graph[a][b] = t;
}
for(int k = 1; k <= n; k++){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]);
}
}
}
int nn;
cin >> nn;
vector<int> v;
for(int i = 0; i < nn; i++){
int c;
cin >> c;
v.push_back(c);
}
int min = INF;
vector<int> answer;
for(int k = 1; k <= n; k++){
int max = 0;
bool flag = true;
for(int i = 0; i < nn; i++){
if((graph[v[i]][k] == INF) || (graph[k][v[i]] == INF)){
flag = false;
break;
}
if(graph[v[i]][k] + graph[k][v[i]] > max)
max = graph[v[i]][k] + graph[k][v[i]];
}
if(flag){
if(max < min) {
min = max;
answer.clear();
answer.push_back(k);
} else if(max == min) {
answer.push_back(k);
}
}
}
for(int i = 0; i < answer.size(); i++){
cout << answer[i] << " ";
}
return 0;
}
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 1197번 최소 스패닝 트리 (C++) (0) | 2022.05.23 |
---|---|
[BOJ] 1717번 집합의 표현 (C++) (0) | 2022.05.23 |
[BOJ] 10026번 적록색약 (C++) (0) | 2022.05.19 |
[BOJ] 22945번 팀 빌딩 (C++) (0) | 2022.05.18 |
[BOJ] 2467번 용액 (C++) (0) | 2022.05.17 |