poj1797 Heavy Transportation Dijkstra算法的简单应用
题目链接:http://poj.org/problem?id=1797
题目就是求所有可达路径的其中的最小值边权的最大值
即对于每一条能够到达的路径,其必然有其最小的承载(其实也就是他们自身的最大的承载);
我们要求的就是所有路径的最小承载中的最大值
代码:
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 #define maxn 1010 7 int n,m; 8 int G[maxn][maxn]; 9 int dis[maxn]; 10 int s[maxn]; 11 void Dijstra() 12 { 13 for(int i=1;i<=n;i++) 14 { 15 dis[i]=G[1][i]; 16 s[i]=0; 17 } 18 s[1]=1; 19 20 21 for(int i=1;i<n;i++) 22 { 23 int max=0; 24 int u=1; 25 26 for(int j=1;j<=n;j++) 27 { 28 if(s[j]==0 && dis[j]>max) 29 { 30 u=j; 31 max=dis[j]; 32 } 33 } 34 if(u==1)break; 35 s[u]=1; 36 for(int j=2;j<=n;j++) 37 { 38 if(s[j]==0 && dis[j]<min(dis[u],G[u][j])) 39 dis[j]=min(dis[u],G[u][j]); 40 41 } 42 } 43 } 44 int main() 45 { 46 int t; 47 scanf("%d",&t); 48 int iCase=0; 49 while(t--) 50 { 51 scanf("%d%d",&n,&m); 52 memset(G,0,sizeof(G)); 53 int u,v,w; 54 for(int i=1;i<=m;i++) 55 { 56 57 scanf("%d%d%d",&u,&v,&w); 58 G[u][v]=w; 59 G[v][u]=w; 60 } 61 Dijstra(); 62 cout<<"Scenario #"<<++iCase<<":"<<endl; 63 cout<<dis[n]<<endl<<endl; 64 } 65 return 0; 66 }