poj 1797 最短路变形dijkstra

题意:题目大意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量

链接:点我
解题思路:其实这个求最大边可以近似于求最短路,只要修改下找最短路更新的条件就可以了

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 #define pb(a) push_back(a)
11 const int INF=0x3f3f3f3f;
12 const double eps=1e-5;
13 typedef long long ll;
14 #define cl(a) memset(a,0,sizeof(a))
15 #define ts printf("*****
");
16 const int MAXN=1010;
17 int n,m,tt,cnt;
18 int dist[MAXN][MAXN];
19 #define typec int
20 bool vis[MAXN];
21 int pre[MAXN];
22 int cost[MAXN][MAXN],lowcost[MAXN];
23 void Dijkstra(int n,int beg)
24 {
25     for(int i=1;i<=n;i++)
26     {
27         lowcost[i]=0;vis[i]=false;pre[i]=-1;
28     }
29     lowcost[beg]=INF;
30     for(int j=0;j<n;j++)
31     {
32         int k=-1;
33         int Min=0;
34         for(int i=1;i<=n;i++)
35         if(!vis[i]&&lowcost[i]>Min)
36         {
37             Min=lowcost[i];
38             k=i;
39         }
40         if(k==-1)break;
41         vis[k]=true;
42         for(int i=1;i<=n;i++)
43         if(!vis[i]&&min(lowcost[k],cost[k][i])>lowcost[i])
44         {
45             lowcost[i]=min(lowcost[k],cost[k][i]);
46             pre[i]=k;
47         }
48     }
49 }
50 int main()
51 {
52     int i,j,k;
53     #ifndef ONLINE_JUDGE
54     freopen("1.in","r",stdin);
55     #endif
56     int ca=1;
57     int tt;
58     scanf("%d",&tt);
59     while(tt--)
60     {
61         scanf("%d%d",&n,&m);
62         cl(cost);
63         int u,v,w;
64         cl(cost);
65         for(i=0;i<m;i++)
66         {
67             scanf("%d%d%d",&u,&v,&w);
68             cost[u][v]=cost[v][u]=max(cost[u][v],w);
69         }
70         /*for(i=1;i<=n;i++)
71         {
72             for(j=1;j<=n;j++)
73             {
74                 printf("%d ",cost[i][j]);
75             }
76             printf("
");
77         }*/
78         Dijkstra(n,1);
79         printf("Scenario #%d:
%d

",ca++,lowcost[n]);
80     }
81     return 0;
82 }
原文地址:https://www.cnblogs.com/cnblogs321114287/p/4587773.html