题意:给你一张简单无向图,问你1到n的次短路。注意,可以不是简单路径。

存个次短路板子,原理还是挺简单,直接看代码吧。然后这份代码还是个fread的示例用法。

  1. #include<cstdio>
  2. #include<queue>
  3. #include<algorithm>
  4. #include<cstring>
  5. using namespace std;
  6. const int BUF=60000000;
  7. char Buf[BUF],*buf=Buf;
  8. inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
  9. #define N 100000+10
  10. #define INF 1000000000000000ll
  11. typedef long long ll;
  12. typedef pair<ll, int> Point;
  13. priority_queue<Point,vector<Point>,greater<Point> >Heap;
  14. int n;
  15. ll dist[N],dist2[N];
  16. int e,first[N],nex[N<<1],v[N<<1],w[N<<1];
  17. void AddEdge(int U, int V,int W){
  18. v[++e]=V;
  19. w[e]=W;
  20. nex[e]=first[U];
  21. first[U]=e;
  22. }
  23. int m,T;
  24. int main()
  25. {
  26. int x,y,z;
  27. // freopen("1011.in","r",stdin);
  28. fread(Buf,1,BUF,stdin);
  29. read(T);
  30. for(;T;--T){
  31. read(n); read(m);
  32. e=0;
  33. memset(first,0,sizeof(first));
  34. for(int i=1;i<=m;++i){
  35. read(x); read(y); read(z);
  36. AddEdge(x-1,y-1,z);
  37. AddEdge(y-1,x-1,z);
  38. }
  39. fill(dist,dist+n,INF);
  40. fill(dist2,dist2+n,INF);
  41. dist[0]=0;
  42. Heap.push(Point(0,0));
  43. while(!Heap.empty()){
  44. Point o=Heap.top(); Heap.pop();
  45. int U=o.second;
  46. ll d=o.first;
  47. if(dist2[U]<d){
  48. continue;
  49. }
  50. for(int i=first[U];i;i=nex[i]){
  51. ll d2=d+(ll)w[i];
  52. if(dist[v[i]]>d2){
  53. swap(dist[v[i]],d2);
  54. Heap.push(Point(dist[v[i]],v[i]));
  55. }
  56. if(dist2[v[i]]>d2 && dist[v[i]]<d2){
  57. dist2[v[i]]=d2;
  58. Heap.push(Point(dist2[v[i]],v[i]));
  59. }
  60. }
  61. }
  62. printf("%lld\n",dist2[n-1]);
  63. }
  64. return 0;
  65. }

【dijkstra】【次短路】【fread】hdu6181 Two Paths的更多相关文章

  1. Dijkstra最短路算法

    Dijkstra最短路算法 --转自啊哈磊[坐在马桶上看算法]算法7:Dijkstra最短路算法 上节我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最 ...

  2. dijkstra(最短路)和Prim(最小生成树)下的堆优化

    dijkstra(最短路)和Prim(最小生成树)下的堆优化 最小堆: down(i)[向下调整]:从第k层的点i开始向下操作,第k层的点与第k+1层的点(如果有)进行值大小的判断,如果父节点的值大于 ...

  3. 【坐在马桶上看算法】算法7:Dijkstra最短路算法

           上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”.本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径 ...

  4. poj 2253 Frogger (dijkstra最短路)

    题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  5. PAT 1018 Public Bike Management(Dijkstra 最短路)

    1018. Public Bike Management (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  6. PAT 甲级 1003Emergency(Dijkstra最短路)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  7. 洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 && 乱搞

    题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶 ...

  8. dijkstra 最短路算法

    最朴素的做法o(V*V/2+2E)~O(V^2)#include<iostream>using namespace std;#include<vector>#include&l ...

  9. Dijkstra 最短路算法(只能计算出一条最短路径,所有路径用dfs)

    上周我们介绍了神奇的只有五行的 Floyd 最短路算法,它可以方便的求得任意两点的最短路径,这称为"多源最短路".本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做&q ...

随机推荐

  1. bzoj 1052 dfs

    首先可以二分答案,将最优性问题转化为判定性问题. 对于二分到的边长,我们可以把所有的点看成一个大的矩形,这个矩形为包括所有点的最小矩形,那么贪心的想,3个正方形,第一个肯定放在这个矩形其中的一角,然后 ...

  2. 空间数据库系列一:geomesa&sparksql 分析环境搭建

    geomesa sparksql 分析环境搭建 1.安装hbase-1.3.2.1 standlone版本,作为geomesa的store a.修改配置文件:hbase-1.3.2.1/conf/hb ...

  3. 我用.htaccess做了些什么?

    1.防图片盗链,减轻流量压力: 2.index.php 301转向到域名,有利于PR权重集中: 3.其它还不会,慢慢来…… 我是如何做的? <IfModule mod_rewrite.c> ...

  4. linux编程之多线程编程

    我们知道,进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了用场,比如实现一个图形界面的下载软件,一方面 ...

  5. 下载 LFS所需要的源码包的脚本程序及检验方法

    下载 LFS所需要的源码包的脚本程序及检验方法 http://blog.csdn.net/yygydjkthh/article/details/45315143

  6. C++11——Use auto keyword in C++11

    版权声明:本文系原创,转载请注明来源. Compile your program with: g++ -std=c++ -o target_name filen_ame.cpp or: g++ -st ...

  7. Vim常用命令(转)—默写版

    1.光标移动 上: 下: 左: 『字母小写』 右: 上一行行首: 『减号』 下一行行首: 行首: 『数字0』 行尾: 单词词尾或后一个单词词尾: 后一个单词词首: 单词词首或前一个单词词首: 跳转到特 ...

  8. Android端与Android端利用WIFI进行FTP通信

    一.客户端通信工具类: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im ...

  9. Dubbo之旅--注册中心

    在介绍Dubbo的内部逻辑的时候提到很多次注册中心的概念.实现注册中心的有很多,主要是以下四个注册中心分别是: Multicast注册中心 Zookeeper注册中心 Redis注册中心 Simple ...

  10. leetcode 之Candy(12)

    这题的思路很巧妙,分两遍扫描,将元素分别和左右元素相比较. int candy(vector<int> &rattings) { int n = rattings.size(); ...