AOJ2249最短路+最小费用

题意:求出某个点到其他点的最短路,并求出在最短路情况下的最小费用

分析:用dijkstra求出最短路并同时更新最小费用即可,注意的是在最短路长度相同时费用取最小即可

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=20010;
15 const int INF=1<<28;
16 struct edge{
17     int to,dis,cost;
18 };
19 typedef pair<int,int> P;
20 int n,m;
21 vector<edge> g[maxn];
22 int d[maxn];
23 int pay[maxn];
24 void dijkstra(int s)
25 {
26     priority_queue<P,vector<P>, greater<P> >que;
27     fill(d,d+n+1,INF);
28     fill(pay,pay+n+1,INF);
29     d[s]=0;
30     que.push(P(0,s));
31     while(!que.empty())
32     {
33         P p=que.top(); que.pop();
34         int v=p.second;
35         if(d[v]<p.first)  continue;
36         for(int i=0;i<g[v].size();i++)
37         {
38             edge e=g[v][i];
39             //cout<<e.to<<"abd"<<endl;
40             if(d[e.to]>d[v]+e.dis){
41                 d[e.to]=d[v]+e.dis;
42                 pay[e.to]=e.cost;
43                 //num[e.to]=min(num[e.to],pay[e.to]);
44                 que.push(P(d[e.to],e.to));
45             }else if(d[e.to]==d[v]+e.dis){
46                 pay[e.to]=min(e.cost,pay[e.to]);
47             }
48         }
49     }
50 }
51 int main()
52 {
53     while(cin>>n>>m)
54     {
55         if(n+m==0)  break;
56         for(int i=0;i<=maxn-1;i++) g[i].clear();
57         for(int i=0;i<m;i++)
58         {
59             int u,v,d,c;
60             scanf("%d%d%d%d",&u,&v,&d,&c);
61             edge e;
62             e.to=v,e.dis=d,e.cost=c;
63             g[u].push_back(e);
64             edge e1;
65             e1.to=u,e1.dis=d,e1.cost=c;
66             g[v].push_back(e1);
67         }
68         dijkstra(1);
69         int sum=0;
70         for(int i=2;i<=n;i++){
71             sum+=pay[i];
72         }
73         cout<<sum<<endl;
74     }
75     return 0;
76 }
View Code
原文地址:https://www.cnblogs.com/wolf940509/p/5706409.html