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 }

 

posted on 2013-10-19 21:16  GyyZyp  阅读(172)  评论(0编辑  收藏  举报

导航