#include <iostream> using namespace std; #define MAX 1001 #define INF 1000001 int matrix[MAX][MAX]; int dis[MAX]; int s[MAX]; void MaxWeight(int& v) { int u; for(int i = 1; i <= v; ++i) { dis[i] = matrix[1][i]; s[i] = 0; } s[1] = 1; int maxDis; for(int i = 1; i <= v - 1; ++i) { maxDis = 0; for(int j = 1; j <= v; ++j) if(!s[j] && dis[j] > maxDis) { u = j; maxDis = dis[j]; } s[u] = 1; for(int j = 1; j <= v; ++j) if(!s[j] && (dis[u]<matrix[u][j]?dis[u]:matrix[u][j]) > dis[j] ) dis[j] = (dis[u]<matrix[u][j]?dis[u]:matrix[u][j]); } } int main() { int N; int v, m; int v1, v2; scanf("%d", &N); for(int i = 1; i<= N; ++i) { scanf("%d%d", &v, &m); memset(matrix, 0, sizeof(int)*MAX*MAX); for(int j = 1; j <= m; ++j) { scanf("%d%d",&v1, &v2); scanf("%d", &matrix[v1][v2]); matrix[v2][v1] = matrix[v1][v2]; } MaxWeight(v); printf("Scenario #%d:/n%d/n/n", i, dis[v]); } return 0; } // 把握找到最大值边后更新的的最优子结构: // dis[j] = max{d[j], min{dis[u], matrix[u][j]}} // 关键就是加入新的最值点时,怎样更新源点到其他点的dis(可能 //是更新源点到其他点的最短路径,本题是更新源点到其他点的最大 //流).