题目大意:
给出n个节点和m条路线,对于接下来的m 行,每行输入a b c 表示a b 之间有一条权值为c的路,你的任务是从 1 走到 n,每次你只能走权值 <= ans 的路,输出最小的ans值。
解题思路:
首先注意一下多组输入,然后地图200 * 200, Floyd水过去就好了,改一下路径松弛的过程即可。
Code:
#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cstring>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 250;
const int inf = 0x3f3f3f3f;
int mp[N][N];
int n, m;
int main()
{
ios::sync_with_stdio(false);
while (cin >> n >> m)
{
for (int i = 1; i <= n; i ++)//每次先初始化
for (int j = 1; j <= n; j ++)
mp[i][j] = (i == j) ? 0 : inf;
for (int i = 1; i <= m; i ++)
{
int a, b, c;
cin >> a >> b >> c;
mp[a][b] = min(mp[a][b], c);
}
for (int k = 1; k <= n; k ++)
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= n; j ++)
mp[i][j] = min(mp[i][j], max(mp[i][k], mp[k][j]));//这里改一下即可
cout << mp[1][n] << endl;
}
return 0;
}