poj 1511(spfa)
---恢复内容开始---
http://poj.org/problem?id=1511
一个spfa类的模板水题。
题意:就是求从1到n个点的来回的所有距离和。
对spfa类的题还是不太熟练,感觉还是做少了,多水水这种题。
思路:也就是双向的spfa就行了。这里就是注意答案要用long long 类型来存就可以。
- #include <stdio.h>
- #include <string.h>
- #include <queue>
- #define maxn 1000010
- #define inf 0x3f
- using namespace std;
- int m,n,pos,a[ maxn ],b[ maxn ],c[ maxn ],head[ maxn ];
- long long ans , dist[ maxn ];
- bool vis[ maxn ];
- struct note {
- int v,w,next;
- }edge[maxn];
- void init()
- {
- pos = ;
- memset( dist , inf , sizeof( dist ) );
- memset( head , - , sizeof( head ) );
- memset( vis , false ,sizeof( vis ) );
- }
- void add(int x,int v,int w) //这是用数组来构建的一个邻接表。不懂可以在纸上模拟一次就行。
- {
- edge[ pos ].v = v;
- edge[ pos ].w = w;
- edge[ pos ].next = head[ x ];
- head[ x ] = pos++;
- }
- void spfa() //标准的spfa模板。如果可能有负权回路的话,那就加个num数组来判断。
- {
- queue<int >s;
- s.push();
- vis[ ] = true;
- dist[ ] = ;
- while(!s.empty())
- {
- int tmp = s.front();
- s.pop();
- vis [ tmp ] = false;
- for( int i = head[ tmp ] ; i != - ; i = edge[ i ].next )
- {
- if( dist[ edge[ i ].v ] > dist[ tmp ] + edge[ i ].w)
- {
- dist[ edge[ i ].v ] = dist[ tmp ] + edge[ i ].w;
- if( !vis[ edge[ i ].v ] )
- {
- s.push( edge[ i ].v );
- vis[ edge[ i ].v ] =true;
- }
- }
- }
- }
- for( int i = ; i <= m ; i++ )
- ans += dist[ i ];
- }
- int main()
- {
- // freopen("in.txt","r",stdin);
- int t;
- scanf("%d",&t);
- while(t--)
- {
- ans = ;
- scanf("%d%d",&m,&n);
- init(); //两次spfa,正向和反向。
- for( int i = ; i <= n ; i++ )
- {
- scanf("%d%d%d",&a[ i ],&b[ i ],&c[ i ]);
- add( a[ i ] , b[ i ] , c[ i ] );
- }
- spfa();
- init();
- for( int i = ; i <= n ; i++ )
- add( b[ i ] , a[ i ] , c[ i ] );
- spfa();
- printf("%lld\n",ans);
- }
- return ;
- }
poj 1511(spfa)的更多相关文章
- poj 1511(SPFA+邻接表)
题目链接:http://poj.org/problem?id=1511 思路:题目意思很简单就是要求源点到各点的最短路之和,然后再求各点到源点的最短路之和,其实就是建两个图就ok了,其中一个建反图.1 ...
- Invitation Cards POJ 1511 SPFA || dij + heap
http://poj.org/problem?id=1511 求解从1去其他顶点的最短距离之和. 加上其他顶点到1的最短距离之和. 边是单向的. 第一种很容易,直接一个最短路, 然后第二个,需要把边反 ...
- POJ 1511 SPFA+邻接表 Invitation Cards
题目大意: 计算从 1 点 到 其他所有点的 往返距离之和, 因为是 有向图, 所以我们需要将图反存 一次, 然后求两次单源最短路, 结果就出来了. #include <iostream> ...
- DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards
题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...
- HDU 1535 Invitation Cards (POJ 1511)
两次SPFA. 求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换.可是这个有1000000个点.矩阵开不了. d1[]为 1~N 的最短路. 将全部边的 邻点 交换. d ...
- 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 / ...
- Poj(1511),SPFA
题目链接:http://poj.org/problem?id=1511 嗯,最后一次写SPFA了,以后就套模板了. 题意:给出n个点和n条有向边,求所有点到源点1的来回最短路之和(保证每个点都可以往返 ...
- (最短路 SPFA)Invitation Cards -- poj -- 1511
链接: http://poj.org/problem?id=1511 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82829#probl ...
- POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))
题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...
随机推荐
- HBase命令(一) -- 库操作
打开数据库 bin/start-hbase.sh //打开HBase bin/hbase shell //以命令行的方式打开Hbase控制台 Rest接口开启 bin/hbase rest //普通的 ...
- Centos6.5搭建java开发环境
一.安装jdk 1.查看Linux自带的JDK是否已安装 java –version 如果出现openjdk,最好还是先卸载掉openjdk,在安装sun公司的jdk. 2.查看jdk信息 rpm - ...
- asp.net mvc 4 高级编程学习笔记:第四章 模型
数据模型 数据模型及O/R转化,采用EntityFramework实现. 可以采用firstCode模型,首先定义模型,通过模型生成数据库,也可以通过安装EFPowerTools,通过数据库自动生成对 ...
- the usage of linux command "expect"
#! /usr/bin/expect -f# this script is used to practise the command "expect" #when "li ...
- R获取股票数据
R中好几个Pkg都提供了股票数据的在线下载方法,如果非得在其中找出一个最好的,那么quantmod当之无愧!举一个例子,譬如下载沪市大盘数据,代码可以是: library(quantmod)SSE & ...
- ExtJS + fileuploadfield上传文件代码
后台服务端接收文件的代码: /** * 后台上传文件处理Action */ @RequestMapping(value = "/uploadFile", method=Reques ...
- CSS3:flex布局应用
想把先前的整理的东西贴出来,怎奈总是有额外事情发生,额,教训电脑要离水杯远点~~ 推荐一本书,<编写可维护的Javascript>这是Nicbolas C.Zakas写的,他的<Ja ...
- $(document).ready(){}、$(fucntion(){})、(function(){})(jQuery)onload()的区别
1.首先说JQuery的几个写法 $(function(){ //do someting }); $(document).ready(function(){ //do so ...
- JS替换函数
var id= id.replace(/\,/g, "','"); 记一下,
- POJ 2115 C Looooops
扩展GCD...一定要(1L<<k),不然k=31是会出错的 .... C Looooops Time Limit: 1000MS Mem ...