문제) 백준 - 플루이드 와샬 - 가운데에서 만나기
https://www.acmicpc.net/problem/21940
21940번: 가운데에서 만나기
위 조건을 만족하는 도시 $X$의 번호를 출력한다. 만약 가능한 도시 $X$가 여러 개인 경우는 도시의 번호를 오름차순으로 출력한다.
www.acmicpc.net
N이 최대 200이기 때문에 플루이드 와샬로도 충분히 해결할 수 있습니다.
C++ 소스코드)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> | |
#define endl '\n' | |
#define MAX 202 | |
#define INF 987654321 | |
#define int long long | |
using namespace std; | |
int N, M, K; | |
int board[MAX][MAX]; | |
int arr[MAX]; | |
signed main(){ | |
ios_base::sync_with_stdio(false); | |
cin.tie(0); cout.tie(0); | |
cin >> N >> M; | |
for(int i = 1; i <= N; ++i) | |
for(int j = 1; j <= N; ++j){ | |
if(i == j) board[i][j] = 0; | |
else board[i][j] = INF; | |
} | |
for(int i = 0; i < M; ++i){ | |
int a, b, c; cin >> a >> b >> c; | |
board[a][b] = min(board[a][b], c); | |
} | |
for(int t = 1; t <= N; ++t) | |
for(int i = 1; i <= N; ++i) | |
for(int j = 1; j <= N; ++j) | |
board[i][j] = min(board[i][j], board[i][t] + board[t][j]); | |
cin >> K; | |
for(int i = 0; i < K; ++i) | |
cin >> arr[i]; | |
vector<int> ans; | |
int minDist = INF; | |
for(int now = 1; now <= N; ++now){ | |
int temp = -1; | |
bool flag = true; | |
for(int i = 0; i < K; ++i){ | |
if(board[arr[i]][now] + board[now][arr[i]] >= INF){ | |
flag = false; | |
break; | |
} | |
temp = max(temp, board[arr[i]][now] + board[now][arr[i]]); | |
} | |
if(flag){ | |
if(temp < minDist){ | |
minDist = temp; | |
ans.clear(); | |
ans.push_back(now); | |
}else if(temp == minDist){ | |
ans.push_back(now); | |
} | |
} | |
} | |
for(int a: ans) | |
cout << a << " "; | |
return 0; | |
} |
반응형
'PS(Problem Solving) > 백준_BOJ' 카테고리의 다른 글
[백준] 14863번 - 서울에서 경산까지 (C++) 문제 및 풀이 (0) | 2022.03.08 |
---|---|
[백준] 9024번 - 두 수의 합 (C++) 문제 및 풀이 (0) | 2022.03.07 |
[백준] 1251번 - 단어 나누기 (Python) 문제 및 풀이 (0) | 2022.03.04 |
[백준] 14430번 - 자원 캐기 (C++) 문제 및 풀이 (0) | 2022.03.04 |
[백준] 9996번 - 한국이 그리울 땐 서버에 접속하지 (Python) 문제 및 풀이 (0) | 2022.03.03 |
댓글