题目简介

题目描述

给你一个N点M边的有向图,求第一个点到第n个点的最短路和最短路条数

题目分析

很明显直接Dijkstra求最短路,加一个最短路计数

如下:

  1. if(dis[y]>dis[x]+edge[i].w){
  2. dis[y]=dis[x]+edge[i].w;
  3. ans[y]=ans[x];
  4. }
  5. else if(dis[y]==dis[x]+edge[i].w) ans[y]+=ans[x];

记住要删除重边,要不然计数会重复

上代码

  1. #include<bits/stdc++.h>
  2. #define re register
  3. #define ll long long
  4. using namespace std;
  5. inline int read()
  6. {
  7. ll k=1,sum=0;
  8. char c=getchar();
  9. for(;c<'0' || c>'9';c=getchar()) if(c=='-') k=-1;
  10. for(;c>='0' && c<='9';c=getchar()) sum=sum*10+c-'0';
  11. return sum*k;
  12. }
  13. const int N=2e3+10,E=4e6+10;
  14. int n,e;
  15. struct Edge{
  16. int to,nxt,w;
  17. };
  18. Edge edge[E<<1];
  19. const int MOD=100003;
  20. int head[N],cnt;
  21. int dep[N];
  22. int dis[N],ans[N];
  23. bool vis[N];
  24. int awsl[N][N];
  25. struct New{
  26. int x,d;
  27. bool operator<(const New& qwq) const{
  28. return d>qwq.d;
  29. }
  30. };
  31. priority_queue<New> Q;
  32. inline void Add(int x,int y,int w){
  33. edge[++cnt].to=y;
  34. edge[cnt].nxt=head[x];
  35. edge[cnt].w=w;
  36. head[x]=cnt;
  37. }
  38. inline void Dijkstra(){
  39. memset(dis,0x3f3f3f3f,sizeof(dis));
  40. dis[1]=0;ans[1]=1;
  41. Q.push((New){1,0});
  42. while(!Q.empty()){
  43. New fr=Q.top();Q.pop();
  44. int x=fr.x;
  45. if(vis[x]) continue;
  46. vis[x]=1;
  47. for(re int i=head[x];i;i=edge[i].nxt){
  48. int y=edge[i].to;
  49. if(dis[y]>dis[x]+edge[i].w){
  50. dis[y]=dis[x]+edge[i].w;
  51. ans[y]=ans[x];
  52. Q.push((New){y,dis[y]});
  53. }
  54. else if(dis[y]==dis[x]+edge[i].w) ans[y]+=ans[x];
  55. }
  56. }
  57. }
  58. int main()
  59. {
  60. n=read();e=read();
  61. for(re int i=1;i<=e;++i){
  62. int x=read(),y=read(),w=read();
  63. if(!awsl[x][y] || awsl[x][y]>w){
  64. Add(x,y,w);awsl[x][y]=w;
  65. }
  66. }
  67. Dijkstra();
  68. if(ans[n]==0) cout<<"No answer";
  69. else cout<<dis[n]<<" "<<ans[n];
  70. return 0;
  71. }

洛谷P1608 路径计数的更多相关文章

  1. 洛谷——P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

  2. 洛谷 P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

  3. 洛谷——P1176 路径计数2

    P1176 路径计数2 题目描述 一个N \times NN×N的网格,你一开始在(1,1)(1,1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N)(N,N),即右下角有 ...

  4. 洛谷 P1176 路径计数2

    P1176 路径计数2 题目描述 一个N×N的网格,你一开始在(1, 1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N, N),即右下角有多少种方法. 但是这个问题太简单了, ...

  5. 洛谷P1608路径统计

    题目 这个提示一个简单的最短路计数,除了用数组存上最短路的个数的做法以外,还有可以在得出最短路之后,搜索加剪枝的方法来通过该题. 可以反向搜索用A*的方法来通过,但是这个题的去重十分的恶心,需要一些玄 ...

  6. 洛谷P1144-最短路计数-最短路变形

    洛谷P1144-最短路计数 题目描述: 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 思路: \(Dijkstra ...

  7. 洛谷 [P1608] 最短路计数

    最短路计数模版 本题要注意重边的处理 #include <iostream> #include <cstdio> #include <algorithm> #inc ...

  8. 洛谷——P3914 染色计数

    P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...

  9. 洛谷 P3914 染色计数

    P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...

随机推荐

  1. ImageView的功能和使用

    ImageView继承自View类,它的功能用于显示图片, 或者显示Drawable对象 xml属性: src和background区别 参考:http://hi.baidu.com/sunboy_2 ...

  2. H2 数据库使用简介

    博客地址:http://www.moonxy.com 一.前言 H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中.H2 主要有如下三 ...

  3. Jenkins 持续集成安装及使用简介

    博客地址:http://www.moonxy.com 一.前言 持续集成(Continuous integration,简称CI)指的是,频繁地(一天多次)将代码集成到主干. 持续集成的目的,就是让产 ...

  4. JAVA用递归来判断回文串

    用递归来判断回文串 思路: ①首先如果是空串,一个字符,则判断是回文串 ②若不满足①,则我们需要对字符串进行递归判断,我们会想到要用第一个字符和最后一个字符进行比较,若相同则,第二个和倒数第二个进行比 ...

  5. 【转】在Linux下搭建Git服务器

    在 Linux 下搭建 Git 服务器 环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.windows. ...

  6. NN and the Optical Illusion-光学幻觉 CodeForce1100C 几何

    题目链接:NN and the Optical Illusion 题目原文 NN is an experienced internet user and that means he spends a ...

  7. The type java.lang.AutoCloseable cannot be resolved. It is indirectly referenced from required .class files

    出现问题: The type java.lang.AutoCloseable cannot be resolved. It is indirectly referenced from required ...

  8. python打开文件查询字符串时报UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 19: illegal multibyte sequence错误

    当这样打开时报错了 lines = open(path).readlines() open(path).close() for line in lines: idx1 = line.find('检测到 ...

  9. SSM框架手动实现分页逻辑(非PageHelper)

    第一种方法:查询出所有数据再分页 分析: 分页时,需要获得前台传来的两个参数,分别为pageNo(第几页数据),pageSize(每页的条数); 根据这两个参数来计算出前端需要的数据是查出数据list ...

  10. 触电JavaScript-如何将json 二维数组转换为 JSON object

    最近因为项目中使用的是 ActiveReports .Net 产品,因为他们最近新出了  ActiveReports JS 版本,所以内心有点痒痒,想试试这个纯前端版本报表控件到底如何,毕竟我们项目有 ...