---恢复内容开始---

http://poj.org/problem?id=1511

一个spfa类的模板水题。

题意:就是求从1到n个点的来回的所有距离和。

对spfa类的题还是不太熟练,感觉还是做少了,多水水这种题。

思路:也就是双向的spfa就行了。这里就是注意答案要用long long 类型来存就可以。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <queue>
  4. #define maxn 1000010
  5. #define inf 0x3f
  6.  
  7. using namespace std;
  8.  
  9. int m,n,pos,a[ maxn ],b[ maxn ],c[ maxn ],head[ maxn ];
  10.  
  11. long long ans , dist[ maxn ];
  12.  
  13. bool vis[ maxn ];
  14.  
  15. struct note {
  16. int v,w,next;
  17. }edge[maxn];
  18.  
  19. void init()
  20. {
  21. pos = ;
  22. memset( dist , inf , sizeof( dist ) );
  23. memset( head , - , sizeof( head ) );
  24. memset( vis , false ,sizeof( vis ) );
  25. }
  26.  
  27. void add(int x,int v,int w) //这是用数组来构建的一个邻接表。不懂可以在纸上模拟一次就行。
  28. {
  29. edge[ pos ].v = v;
  30. edge[ pos ].w = w;
  31. edge[ pos ].next = head[ x ];
  32. head[ x ] = pos++;
  33. }
  34.  
  35. void spfa() //标准的spfa模板。如果可能有负权回路的话,那就加个num数组来判断。
  36. {
  37. queue<int >s;
  38. s.push();
  39. vis[ ] = true;
  40. dist[ ] = ;
  41. while(!s.empty())
  42. {
  43. int tmp = s.front();
  44. s.pop();
  45. vis [ tmp ] = false;
  46. for( int i = head[ tmp ] ; i != - ; i = edge[ i ].next )
  47. {
  48. if( dist[ edge[ i ].v ] > dist[ tmp ] + edge[ i ].w)
  49. {
  50. dist[ edge[ i ].v ] = dist[ tmp ] + edge[ i ].w;
  51. if( !vis[ edge[ i ].v ] )
  52. {
  53. s.push( edge[ i ].v );
  54. vis[ edge[ i ].v ] =true;
  55. }
  56.  
  57. }
  58.  
  59. }
  60. }
  61. for( int i = ; i <= m ; i++ )
  62. ans += dist[ i ];
  63. }
  64.  
  65. int main()
  66. {
  67. // freopen("in.txt","r",stdin);
  68. int t;
  69. scanf("%d",&t);
  70. while(t--)
  71. {
  72. ans = ;
  73. scanf("%d%d",&m,&n);
  74. init(); //两次spfa,正向和反向。
  75. for( int i = ; i <= n ; i++ )
  76. {
  77. scanf("%d%d%d",&a[ i ],&b[ i ],&c[ i ]);
  78. add( a[ i ] , b[ i ] , c[ i ] );
  79. }
  80. spfa();
  81. init();
  82. for( int i = ; i <= n ; i++ )
  83. add( b[ i ] , a[ i ] , c[ i ] );
  84. spfa();
  85. printf("%lld\n",ans);
  86. }
  87. return ;
  88. }

poj 1511(spfa)的更多相关文章

  1. poj 1511(SPFA+邻接表)

    题目链接:http://poj.org/problem?id=1511 思路:题目意思很简单就是要求源点到各点的最短路之和,然后再求各点到源点的最短路之和,其实就是建两个图就ok了,其中一个建反图.1 ...

  2. Invitation Cards POJ 1511 SPFA || dij + heap

    http://poj.org/problem?id=1511 求解从1去其他顶点的最短距离之和. 加上其他顶点到1的最短距离之和. 边是单向的. 第一种很容易,直接一个最短路, 然后第二个,需要把边反 ...

  3. POJ 1511 SPFA+邻接表 Invitation Cards

    题目大意: 计算从 1 点 到 其他所有点的 往返距离之和, 因为是 有向图, 所以我们需要将图反存 一次, 然后求两次单源最短路, 结果就出来了. #include <iostream> ...

  4. DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards

    题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...

  5. HDU 1535 Invitation Cards (POJ 1511)

    两次SPFA. 求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换.可是这个有1000000个点.矩阵开不了. d1[]为 1~N 的最短路. 将全部边的 邻点 交换. d ...

  6. POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)

    POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / ...

  7. Poj(1511),SPFA

    题目链接:http://poj.org/problem?id=1511 嗯,最后一次写SPFA了,以后就套模板了. 题意:给出n个点和n条有向边,求所有点到源点1的来回最短路之和(保证每个点都可以往返 ...

  8. (最短路 SPFA)Invitation Cards -- poj -- 1511

    链接: http://poj.org/problem?id=1511 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82829#probl ...

  9. POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))

    题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...

随机推荐

  1. HBase命令(一) -- 库操作

    打开数据库 bin/start-hbase.sh //打开HBase bin/hbase shell //以命令行的方式打开Hbase控制台 Rest接口开启 bin/hbase rest //普通的 ...

  2. Centos6.5搭建java开发环境

    一.安装jdk 1.查看Linux自带的JDK是否已安装 java –version 如果出现openjdk,最好还是先卸载掉openjdk,在安装sun公司的jdk. 2.查看jdk信息 rpm - ...

  3. asp.net mvc 4 高级编程学习笔记:第四章 模型

    数据模型 数据模型及O/R转化,采用EntityFramework实现. 可以采用firstCode模型,首先定义模型,通过模型生成数据库,也可以通过安装EFPowerTools,通过数据库自动生成对 ...

  4. the usage of linux command "expect"

    #! /usr/bin/expect -f# this script is used to practise the command "expect" #when "li ...

  5. R获取股票数据

    R中好几个Pkg都提供了股票数据的在线下载方法,如果非得在其中找出一个最好的,那么quantmod当之无愧!举一个例子,譬如下载沪市大盘数据,代码可以是: library(quantmod)SSE & ...

  6. ExtJS + fileuploadfield上传文件代码

    后台服务端接收文件的代码: /** * 后台上传文件处理Action */ @RequestMapping(value = "/uploadFile", method=Reques ...

  7. CSS3:flex布局应用

    想把先前的整理的东西贴出来,怎奈总是有额外事情发生,额,教训电脑要离水杯远点~~ 推荐一本书,<编写可维护的Javascript>这是Nicbolas C.Zakas写的,他的<Ja ...

  8. $(document).ready(){}、$(fucntion(){})、(function(){})(jQuery)onload()的区别

     1.首先说JQuery的几个写法  $(function(){     //do someting   });   $(document).ready(function(){     //do so ...

  9. JS替换函数

    var id= id.replace(/\,/g, "','"); 记一下,

  10. POJ 2115 C Looooops

    扩展GCD...一定要(1L<<k),不然k=31是会出错的 ....                        C Looooops Time Limit: 1000MS   Mem ...