洛谷 P1144 最短路计数 Label:水

题目描述

给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。

输入输出格式

输入格式:

 

输入第一行包含2个正整数N,M,为图的顶点数与边数。

接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。

 

输出格式:

 

输出包括N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的结果即可。如果无法到达顶点i则输出0。

 

输入输出样例

输入样例#1:
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
输出样例#1:
1
1
1
2
4

说明

1到5的最短路有4条,分别为2条1-2-4-5和2条1-3-4-5(由于4-5的边有2条)。

对于20%的数据,N ≤ 100;

对于60%的数据,N ≤ 1000;

对于100%的数据,N ≤ 100000,M ≤ 200000。

代码

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<queue>
 7 #define INF 0x3f3f3f3f
 8 #define MAXN 500000
 9 using namespace std;
10 
11 struct cc{
12     int d,num;
13 };
14 
15 struct cmp{
16     bool operator()(cc a,cc b){
17         return a.d>b.d;
18     }
19 };
20 
21 cc make_(int num,int d){
22     cc x;x.d=d;x.num=num;return x;
23 }
24 
25 priority_queue<cc,vector<cc>,cmp> que;
26 vector<int> G[MAXN];
27 int N,M,s,t;
28 int dis[MAXN],vis[MAXN];
29 int sum[MAXN];
30 
31 void Dijkstra(){
32     memset(dis,0x3f,sizeof(dis));
33     que.push(make_(1,0));
34     dis[1]=0;sum[1]=1;
35     while(!que.empty()){
36         cc x=que.top();que.pop();
37         if(vis[x.num])continue;vis[x.num]=1;
38         for(int i=0;i<G[x.num].size();i++){
39             int to=G[x.num][i];
40             if(dis[x.num]+1<dis[to]){
41                 if(dis[to]==INF) {sum[to]=sum[x.num];sum[to]%=100003;}
42                 dis[to]=dis[x.num]+1;
43                 que.push(make_(to,dis[to]));
44             }
45             else if(dis[x.num]+1==dis[to]){sum[to]+=sum[x.num];sum[to]%=100003;}
46 //            printf("%d")
47         }
48     }
49 }
50 
51 void init_(){
52     scanf("%d%d",&N,&M);
53     int u,v,w;
54     for(int i=1;i<=M;i++){
55         scanf("%d%d",&u,&v);
56         G[u].push_back(v);
57         G[v].push_back(u);
58     }
59     Dijkstra();
60 }
61 
62 int main(){
63 //    freopen("01.in","r",stdin);
64     init_();
65     for(int i=1;i<=N;i++){
66         printf("%d\n",sum[i]);
67     }
68     return 0;
69 }
QAQ,水题就别看了吧

跟热浪同一个类型吧

posted @ 2016-10-26 20:16  Radiumlrb  阅读(186)  评论(0编辑  收藏  举报