题目描述

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

输入输出格式

输入格式:

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

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

输出格式:

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

输入输出样例

输入样例#1:

  1. 5 7
  2. 1 2
  3. 1 3
  4. 2 4
  5. 3 4
  6. 2 3
  7. 4 5
  8. 4 5
输出样例#1:

  1. 1
  2. 1
  3. 1
  4. 2
  5. 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_(,));
  34. dis[]=;sum[]=;
  35. while(!que.empty()){
  36. cc x=que.top();que.pop();
  37. if(vis[x.num])continue;vis[x.num]=;
  38. for(int i=;i<G[x.num].size();i++){
  39. int to=G[x.num][i];
  40. if(dis[x.num]+<dis[to]){
  41. if(dis[to]==INF) {sum[to]=sum[x.num];sum[to]%=;}
  42. dis[to]=dis[x.num]+;
  43. que.push(make_(to,dis[to]));
  44. }
  45. else if(dis[x.num]+==dis[to]){sum[to]+=sum[x.num];sum[to]%=;}
  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=;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=;i<=N;i++){
  66. printf("%d\n",sum[i]);
  67. }
  68. return ;
  69. }

QAQ,水题就别看了吧

跟热浪同一个类型吧

洛谷 P1144 最短路计数 Label:水的更多相关文章

  1. 洛谷P1144 最短路计数(SPFA)

    To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...

  2. 洛谷 P1144 最短路计数 解题报告

    P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 第一行包含2个正 ...

  3. 洛谷——P1144 最短路计数

    P1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶 ...

  4. 洛谷 P1144 最短路计数 题解

    P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ...

  5. 洛谷P1144 最短路计数 及其引申思考

    图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...

  6. 洛谷P1144最短路计数题解

    最短路计数 此题还是寻找从1到i点总共有几个最短路且每条边的边长为1,对于这种寻找最短路的个数,我们可以反向搜索,即先用\(SPFA\)预处理出所有点的最短路,然后我们反向记忆化搜索,可以用\(sum ...

  7. 洛谷 P1144 最短路计数

    传送门:https://www.luogu.org/problemnew/show/P1144 这虽然是一道普及+的题,然而我发现我现在还没做过,这也就直接导致我今天模拟T2只杠了个暴力分…… 那这道 ...

  8. 洛谷P1144——最短路计数

    题目:https://www.luogu.org/problemnew/show/P1144 spfa跑最短路的同时记录cnt数组表示到达方案数. 代码如下: #include<iostream ...

  9. 洛谷P1144 最短路计数【堆优化dijkstra】

    题目:https://www.luogu.org/problemnew/show/P1144 题意:问1到各个节点的最短路有多少条. 思路:如果松弛的时候发现是相等的,说明可以经过该点的最短路径到达当 ...

随机推荐

  1. 《CLR via C#》读书笔记(6)类型和成员基础

    6.1 类型的各种成员 在一个类型中,可以定义0个或者多个以下种类的成员: 常量 常量是在编译时设置其值并且永远不能更改其值的字段.使用常量可以为特殊值提供有意义的名称以代替数字文本,以使代码变得更容 ...

  2. 数据结构和算法 – 12.高级查找算法(下)

    哈希(散列)技术既是一种存储方法,也是一种查找方法.然而它与线性表.树.图等结构不同的是,前面几种结构,数据元素之间都存在某种逻辑关系,可以用连线图示表示出来,而哈希技术的记录之间不存在什么逻辑关系, ...

  3. 谈谈Delphi中的类和对象1---介绍几个概念 && 对象是一个地地道道的指针

    参考:http://blog.163.com/liang_liu99/blog/static/88415216200952123412180/ 以下的介绍主要针对的是Delphi的面向对象的知识,可能 ...

  4. jq获取鼠标位置

    jq获取鼠标位置 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. php调用phpqrcode.php生成二维码

    下载phpqrcode.php 下载地址: http://files.cnblogs.com/files/qhorse/phpqrcode.rar qrcode.php文件: <?php inc ...

  6. 再谈EF Core内存数据库单元测试问题

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在用EF Core的内存数据库进行单元测试的时候遇到"无法访问已释放的对象& ...

  7. 在Salesforce中编写Unit Test

    Unit Test 也是一个 Class 文件,所以在创建 Unit Test 的时候要选择 Test Class 类型来创建,请看如下截图(在Eclipse中): 编写 Unit Test 基本流程 ...

  8. Lingo语法

    基本语法 ! 注释,末尾需要分号 ~ 分隔符 集成员无论用何种字符字符标记,它的索引都是从1开始连续计数 在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知. init: endinit ...

  9. loadrunner取出关联数组中的所有元素

    方法一: int num; char nameVar[100]; char nameValue[100]; lr_save_string("AAA","name_1&qu ...

  10. css精灵动画

    精灵动画的实现 CSS Sprites在国内很多人叫CSS精灵,其实这个技术不新鲜,原理就是:靠不断的切换图片让人感觉视觉上不断在变化,例如gif动画之类的效果 那么前端如何实现精灵效果? 传统的就是 ...