1 minute read

사용언어

Visual studio 2019 C++

생각하기

플로이드 워샬 알고리즘 사용

플로이드 워샬 알고리즘

모든 정점들 사이의 최단경로를 구하는 알고리즘

[1238 풀이]

#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 1000 + 1;
int road[MAX][MAX];
int N, M, X;

void floyd() {
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			if (road[j][i] == 0)
				continue;
			for (int k = 1; k <= N; k++) {
				if (road[i][k] == 0 || j == k)
					continue;
				if (road[j][k] == 0 || road[j][k] > road[j][i] + road[i][k]) {
					road[j][k] = road[j][i] + road[i][k];
				}
			}
		}
	}
}

int main() {
	cin >> N >> M >> X;

	for (int i = 0; i < M; i++) {
		int start, end, time;
		cin >> start >> end >> time;
		road[start][end] = time;
	}

	floyd();
	int longtime = 0;;
	for (int i = 1; i <= N; i++) {
		longtime = max(longtime, road[i][X] + road[X][i]);
	}
	cout << longtime << "\n";
}

그냥 궁금한점

ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

이걸 쓰면 입출력이 빨라져서 시간이 더 조금걸려야 되는거 아닌가..?

꼭 그런건 아닌가…? 11404번문제 플로이드는 88ms -> 24ms 였는데….

이 문제는 없을때는 364ms 있으니까 368ms

왜그러징 궁금!!!하다!!!

Categories:

Updated:

Comments