うんどう
1.概要
リンク:https://www.acmicpc.net/problem/1956
2.コード
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include <utility>
#define INF 987654321
using namespace std;
vector<vector<pair<int,int>>> graph;
priority_queue<pair<int, int>, vector<pair<int, int>>> pq;
int memo[401][401];
int v, e;
void floyd_warshall() {
}
int main(void) {
cin >> v >> e;
fill(&memo[0][0], &memo[400][400], INF);
for (int i = 0; i < e; i++) {
int a, b, c;
cin >> a >> b >> c;
memo[a][b] = c;
}
int result = INF;
// floyd-warshall
for (int i = 1; i <= v; i++) {
for (int j = 1; j <= v; j++) {
for (int k = 1; k <= v; k++) {
if (memo[j][k] > memo[j][i] + memo[i][k]) {
memo[j][k] = memo[j][i] + memo[i][k];
if (j == k)
result = min(result, memo[j][k]);
}
}
}
}
if (result == INF)
printf("-1");
else
printf("%d", result);
return 0;
}
3.注記
これはfloyd‐wassalアルゴリズムを変形して解いた最初の問題である.フロイド・ワッシャーアルゴリズムによりmemo[i][i]に格納された値が自分のdistに戻って問題を解決することができる.基本的に,すべてのノードが点を通過して検査されると考えられるので,この実現は可能である.
4.コメント
フロイド・ワッシャーのアルゴリズムはよく知られていないので、すぐには解けません.他の質問に触れて答えたいです.
Reference
この問題について(うんどう), 我々は、より多くの情報をここで見つけました https://velog.io/@aliceshard/운동-1956テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol