码迷,mamicode.com
首页 > 其他好文 > 详细

P1144-最短路计数

时间:2019-09-14 11:03:49      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:span   _for   amp   max   oid   priority   main   scanf   mes   

 1 #include <bits/stdc++.h>
 2 #define pb push_back
 3 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
 4 #define INF 1000000003
 5 #define ll long long
 6 
 7 using namespace std;
 8 
 9 const int maxn = 2000003;
10 inline ll read()
11 {
12     ll ans = 0;
13     char ch = getchar(), last =  ;
14     while(!isdigit(ch)) last = ch, ch = getchar();
15     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - 0, ch = getchar();
16     if(last == -) ans = -ans;
17     return ans;
18 }
19 inline void write(ll x)
20 {
21     if(x < 0) x = -x, putchar(-);
22     if(x >= 10) write(x / 10);
23     putchar(x % 10 + 0);
24 }
25 struct edge
26 {
27     ll to;
28     ll cost;
29 };
30 vector<edge> G[maxn];
31 
32 ll V,E,B;
33 
34 typedef pair<ll,ll> P;//first 是最短距离,second 是顶点编号 
35 ll d[maxn];
36 ll t[maxn];
37 ll ans[maxn];
38 void shortest_path(int s)
39 {
40     priority_queue<P,vector<P>,greater<P>> que;
41     
42     _for(i,1,V+1)
43         d[i] = INF;
44     d[s] = 0;
45     ans[s] = 1;
46     que.push(P{0,s});
47 
48     while(!que.empty())
49     {
50         P p = que.top();que.pop();
51         int v = p.second;
52         if(d[v] < p.first) continue;
53 
54         _for(i,0,G[v].size())
55         {
56             edge e = G[v][i];
57             if(d[e.to] > d[v] + e.cost)
58             {
59                 d[e.to] = d[v] + e.cost;
60                 que.push(P{d[e.to],e.to});
61             }
62             if(d[e.to] == d[v] + e.cost)
63             {
64                 ans[e.to] += ans[v];
65                 ans[e.to] %= 100003;
66             }
67         }
68     }
69 }
70 
71 int main()
72 {
73     V = read(),E = read();
74 
75     _for(i,0,E)
76     {
77         ll s,t,c;
78         s = read(),t = read(),c = 1;
79         //  scanf("%d %d %d",&s,&t,&c);
80         G[s].push_back(edge{t,c});
81         G[t].push_back(edge{s,c});
82     }
83     shortest_path(1);
84     _for(i,1,V+1)
85         printf("%d\n",ans[i]);
86     return 0;
87 }

 

P1144-最短路计数

标签:span   _for   amp   max   oid   priority   main   scanf   mes   

原文地址:https://www.cnblogs.com/Asurudo/p/11518449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!