C - Heavy Transportation POJ - 1797
求从1~n的最大载货量
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = 1010;
int n, m;
int G[maxn][maxn];
bool vis[maxn];
int dis[maxn];
void dijkstra() {
dis[1] = 0;
for(int i = 1; i <= n; i++) dis[i] = G[1][i];
vis[1] = 1;
int minn, u;
for(int i = 1; i <= n; i++) {
minn = 0;
for(int j = 1; j <= n; j++) {
if(!vis[j] && dis[j] > minn) { // 从 i 走到载重更大的路 j
u = j;
minn = dis[j];
}
}
vis[u] = 1;
for(int j = 1; j <= n; j++) dis[j] = max(dis[j], min(dis[u], G[u][j])); // 用优化过的位置 u 作为中转点更新答案
}
return ;
}
int main() {
// freopen("test.in", "r", stdin);
int T; scanf("%d", &T);
for(int kase = 1; kase <= T; kase++) {
memset(vis, 0, sizeof(vis));
memset(G, 0, sizeof(G));
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
G[u][v] = G[v][u] = w;
}
dijkstra();
printf("Scenario #%d:\n", kase);
printf("%d\n\n", dis[n]);
}
return 0;
} ```