[백준/BOJ] 백준 1238번 : 파티
2020. 8. 12. 01:55ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/1238
플로이드 알고리즘을 이용해 각 정점까지 가는 최단 경로를 찾고 x위치까지 왕복 가장 오래 걸리는 학생의 시간을 찾는다.
코드
#include <iostream>
#include <algorithm>
using namespace std;
int adj[1001][1001];
int n, m, x, t;
int Solve(int x)
{
int ret = -1;
//플로이드 알고리즘을 이용해 각 정점까지 가는 최단 경로를 찾는다
for (int i = 1; i <= n; i++)
adj[i][i] = 0;
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
adj[i][j] = min(adj[i][j], adj[i][k] + adj[k][j]);
//x위치까지 왕복 가장 오래 걸리는 학생의 시간을 찾는다
for (int i = 1; i <= n; i++)
{
ret = max(ret, adj[i][x]+adj[x][i]);
}
return ret;
}
//처음 그래프를 초기화 할때 모든 노드가 연결되어 있지 않다는 의미로 매우 큰 수를 넣는다
void adjMake()
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
adj[i][j] = 987654321;
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int u, v;
cin >> n >> m >> x;
adjMake();
for (int i = 0; i < m; i++)
{
cin >> u >> v >> t;
adj[u][v] = t;
}
cout << Solve(x);
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 2146번 : 다리 만들기 (0) | 2020.08.12 |
---|---|
[백준/BOJ] 백준 1389번 : 케빈 베이컨의 6단계 법칙 (0) | 2020.08.12 |
[백준/BOJ] 백준 7562번 : 나이트의 이동 (0) | 2020.08.12 |
[백준/BOJ] 백준 7569번 : 토마토 (0) | 2020.08.11 |
[백준/BOJ] 백준 10026번 : 적록색약 (0) | 2020.08.11 |