大白书P330

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <string.h>
  5. #include <vector>
  6. #include <queue>
  7. using namespace std;
  8. const int maxn = +;
  9. const int INF = ;
  10. struct Edge{
  11. int from,to,dist;
  12. };
  13. struct HeapNode{
  14. int d,u;
  15. bool operator <(const HeapNode &rhs)const {
  16. return d>rhs.d;
  17. }
  18. };
  19. struct Dijkstra{
  20. int n,m;
  21. vector<Edge> edges;
  22. vector<int>G[maxn];
  23. bool done[maxn];
  24. int d[maxn];
  25. int p[maxn];
  26. void inti(int n){
  27. this->n=n;
  28. for(int i=; i < n; ++i)
  29. G[i].clear();
  30. edges.clear();
  31. }
  32. void AddEdge(int from, int to, int dist){
  33. edges.push_back((Edge){from,to,dist});
  34. int m =edges.size();
  35. G[from].push_back(m-);
  36. }
  37. void dijkstra(int s){
  38. priority_queue<HeapNode> Q;
  39. for(int i=; i<n; i++) d[i]=INF;
  40. d[s] = ;
  41. memset(done, false,sizeof(done));
  42. Q.push((HeapNode){,s});
  43. while(!Q.empty()){
  44. HeapNode x =Q.top();Q.pop();
  45. int u =x.u;
  46. if(done[u])continue;
  47. done[u] =true;
  48. for(int i=; i<G[u].size(); ++i){
  49. Edge &e = edges[G[u][i]];
  50. if(d[e.to]>d[u]+e.dist){
  51. d[e.to] = d[u] +e.dist;
  52. p[e.to] = G[u][i];
  53. Q.push((HeapNode){d[e.to],e.to});
  54. }
  55. }
  56. }
  57. }
  58. }solve1;
  59. vector<int> R[maxn];
  60. int dp[maxn];
  61. int dfs(int u){
  62. if(dp[u]!=-) return dp[u];
  63. if(u==) return ;
  64. dp[u]=;
  65. for(int i = ; i<R[u].size(); i++){
  66. int v = R[u][i];
  67. dp[u]+=dfs(v);
  68. }
  69. return dp[u];
  70. }
  71. int main()
  72. {
  73. int n,m;
  74. while(scanf("%d",&n)==&&n){
  75. scanf("%d",&m);
  76. solve1.inti(n);
  77. for(int i = ; i<m; ++i){
  78. int u,v,d;
  79. scanf("%d%d%d",&u,&v,&d); u--,v--;
  80. solve1.AddEdge(u,v,d);
  81. solve1.AddEdge(v,u,d);
  82. }
  83. solve1.dijkstra();
  84. for(int i = ; i<n; i++) R[i].clear();
  85. for(int i = ; i < solve1.edges.size(); ++i){
  86. int u=solve1.edges[i].from, v=solve1.edges[i].to;
  87. if(solve1.d[u]>solve1.d[v])
  88. R[u].push_back(v);
  89. }
  90. memset(dp,-,sizeof(dp));
  91. printf("%d\n",dfs());
  92. }
  93. return ;
  94. }

uva10817 dijkstra的更多相关文章

  1. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  2. 最短路径算法-Dijkstra

    Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...

  3. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  4. POJ 2253 Frogger(Dijkstra)

    传送门 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 39453   Accepted: 12691 Des ...

  5. POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)

    传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Acce ...

  6. Dijkstra 算法

    all the nodes should be carectorized into three groups: (visited, front, unknown) we should pay spec ...

  7. 51nod 1459 迷宫游戏 (最短路径—Dijkstra算法)

    题目链接 中文题,迪杰斯特拉最短路径算法模板题. #include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f ],v ...

  8. 51nod1459(带权值的dijkstra)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...

  9. 求两点之间最短路径-Dijkstra算法

     Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.D ...

随机推荐

  1. Linux环境下$开头的相关变量的含义

    $0 这个程式的执行名字$n 这个程式的第n个参数值,n=1..9$* 这个程式的所有参数,此选项参数可超过9个.$# 这个程式的参数个数$$ 这个程式的PID(脚本运行的当前进程ID号)$! 执行上 ...

  2. cocos2d-x游戏引擎核心之四——动作调度机制

    一.动作机制的用法 在深入学习动作机制在 Cocos2d-x 里是如何实现的之前,我们先来学习整套动作机制的用法,先知道怎么用,再深入学习它如何实现,是一个很好很重要的学习方法. (1)基本概念 CC ...

  3. 【整理】Virtualbox中的网络类型(NAT,桥接等),网卡,IP地址等方面的设置

    之前是把相关的内容,放到: [已解决]实现VirtualBox中的(Guest OS)Mac和主机(Host OS)Win7之间的文件和文件夹共享 中的,现在把关于网络配置方面内容,单独提取出来,专门 ...

  4. POJ 3122 Pie

    题目大意: 给出n个pie的直径,有f+1个人,如果给每人分的大小相同(形状可以不同),每个人可以分多少.要求是分出来的每一份必须出自同一个pie,也就是说当pie大小为3,2,1,只能分出两个大小为 ...

  5. JS-JavaScript类库整理 [更新中...]

    老大.jQuery插件库 ——收集最全最新最好的jQuery插件 http://www.jq22.com/ 一.Moment.js ——JavaScript 日期处理类库 http://momentj ...

  6. Android 简单案例:可移动的View

    CrossCompatibility.rar 1. VersionedGestureDetector.java import android.content.Context; import andro ...

  7. ThinkPHP分页用异步来做,玩转分页类!

    具体为什么用异步来做分页我就不多说了! 用异步来做分页,主要还是看分页类怎么玩! 方便管理,还是把Ajax分页作为一个工具来使用: 同样新建工具类: 多次尝试,最终修改好的分页类是这样的:(我自己使用 ...

  8. R语言NULL、NA、0

    0是假 NULL.NA无法辨认真假 除了以上3个其他的都是真 > if (NULL) print("OK") else print("Error") Er ...

  9. 170801、VM性能调优

    最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现把经验做一记录. 一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老 ...

  10. java个人所得税计算器

    class Caculate{ private String name; private double money; private double actual; /** * @param usern ...