题目大意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 1005 #define inf 0x3f3f3f using namespace std; int a[maxn][maxn],dis[maxn],vis[maxn]; int n,m; void dijkstra() { memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) dis[i]=a[1][i];//最大承载量 vis[1]=1; for(int i=1;i<n;i++) { int x,ma=-1; for(int j=1;j<=n;j++) if(!vis[j]&&dis[j]>ma) ma=dis[x=j]; vis[x]=1; for(int k=1;k<=n;k++) dis[k]=max(dis[k],min(dis[x],a[x][k])); } } int main() { int t; scanf("%d",&t); int g=0; while(t--) { scanf("%d%d",&n,&m); memset(a,0,sizeof(a));//a[i][j]表示i和j之间的承载量,一开始为0 for(int i=1;i<=m;i++) { int x,y,c; scanf("%d%d%d",&x,&y,&c); a[x][y]=a[y][x]=c; } dijkstra(); printf("Scenario #%d: ",++g); printf("%d ",dis[n]); } return 0; }