PKU 1511 Invitation Cards (SPFA+邻接表)
题目链接:点击打开链接
题目需要求从原点到所有点的最短距离之和和所有点到原点的最短距离之和,在求所有点到原点最短距离的时候用到了一个技巧:即把图反向,求原点到所有其他点的最短距离,这样用一次SPFA就可以将所有点到原点的最短距离求出来了。
另外也没什么好说的,纯SPFA。另外用优化到VlogE的dijkstra貌似也能过,有空的时候再写个。
代码如下:
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <queue>
using namespace std; #define MAX 1000009
#define INF 1<<30
struct ENode
{
int to, cost, next;
} enode[MAX * 4]; int NE = 0;
int OriginHead[MAX], RevHead[MAX];
int dist[MAX]; void insertEdge( int from, int to, int cost )
{
enode[NE].cost = cost; enode[NE].to = to; enode[NE].next = OriginHead[from]; OriginHead[from] = NE++;
enode[NE].cost = cost; enode[NE].to = from; enode[NE].next = RevHead[to]; RevHead[to] = NE++;
} void initDist( int n )
{
for (int i=0; i<=n; i++) dist[i] = INF;
dist[1] = 0;
} int inQueue[MAX];
queue<int> Q;
void SPFA( int *Head )
{
inQueue[1] = 1;
Q.push(1);
while ( ! Q.empty() )
{
int q = Q.front();
Q.pop();
inQueue[q] = 0;
for ( int i=Head[q]; i!=-1; i=enode[i].next )
{
int e = enode[i].to;
if ( dist[q] + enode[i].cost < dist[e] )
{
dist[e] = dist[q] + enode[i].cost;
if ( !inQueue[e] )
{
inQueue[e] = 1;
Q.push( e );
}
}
}
}
} long long getTotal( int n )
{
long long ret = 0;
for (int i=2; i<=n; i++)
ret += dist[i];
return ret;
} int main( )
{
//cout << (int)(1<<30) << endl;
int T;
cin >> T; while( T-- )
{
int n, m;
scanf("%d%d", &n, &m); memset( OriginHead, -1, sizeof(OriginHead) );
memset( RevHead, -1, sizeof(RevHead) );
NE = 0;
for (int i=0; i<m; i++)
{
int from, to, cost;
scanf( "%d%d%d", &from, &to, &cost );
insertEdge( from, to, cost );
} initDist( n );
memset( inQueue, 0, sizeof(inQueue) );
SPFA( OriginHead );
long long int ans = 0;
ans += getTotal( n ); //cout << ans << endl;
initDist( n );
memset( inQueue, 0, sizeof(inQueue) );
SPFA( RevHead );
ans += getTotal( n ); cout << ans << endl;
} return 0;
}
PKU 1511 Invitation Cards (SPFA+邻接表)的更多相关文章
- POJ 1511 Invitation Cards (spfa的邻接表)
Invitation Cards Time Limit : 16000/8000ms (Java/Other) Memory Limit : 524288/262144K (Java/Other) ...
- Invitation Cards(邻接表+逆向建图+SPFA)
Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 17538 Accepted: 5721 Description In ...
- Poj 1511 Invitation Cards(spfa)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 24460 Accepted: 8091 De ...
- HDU 1535 Invitation Cards(逆向思维+邻接表+优先队列的Dijkstra算法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1535 Problem Description In the age of television, n ...
- poj 1511 Invitation Cards spfa 邻接矩阵
题目链接: http://poj.org/problem?id=1511 题目大意: 这道题目比较难理解,我读了好长时间,最后还是在队友的帮助下理解了题意,大意就是,以一为起点,求从一到其他各点的最短 ...
- 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 / ...
- POJ1511 Invitation Cards SPFA算法裸题变形
原题目:http://poj.org/problem?id=1511 给出一个有向图,求出这个图从1到所有点的最短路径和所有点到1的最短路径的和. 这题数据量有点大,数据范围也大,所以用SPFA+邻接 ...
- POJ 1511 - Invitation Cards 邻接表 Dijkstra堆优化
昨天的题太水了,堆优化跑的不爽,今天换了一个题,1000000个点,1000000条边= = 试一试邻接表 写的过程中遇到了一些问题,由于习惯于把数据结构封装在 struct 里,结果 int [10 ...
- SPFA算法(2) POJ 1511 Invitation Cards
原题: Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 31230 Accepted: ...
随机推荐
- 明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示
#include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typed ...
- Xcode 使用自定义字体
添加对应的字体(.ttf或.odf)到工程的resurce,使用cocos2d中的FontLabel库,FontLabel继承于UILabel,象UILabel一样使用就好了 fontName直接使用 ...
- YZOI回忆录&&YZOI3.0介绍&&某些资源的分享
“那段时光就像块透明的琉璃,美得那么虚幻.飘渺.可是它毕竟在我生命里闪现,哪怕如萤光一样微弱,却照亮了我整个心房.”1.前序伴随着yzoi2.0版本离我而去的是我半年的OI生涯,在这半年内我步入了一个 ...
- 学C++不得不看的一篇文章[转]
1. 扎实的基础.数据结构.离散数学.编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序.据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件.程序人人都会写,但当 ...
- Ajax基础--JavaScript实现
ajax原理 1.ajax 即“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),也就是无刷新数据读取. 通俗地讲就是:AJAX 通过在后台与 ...
- 织梦 dedecms 中LOOP 万能标签循环 调用 arcurl标签(获取链接)
在DEDECMS中,提供了loop万能循环标签,但是此循环标签只能循环出该表中的字段,而“[field:arcurl/]”链接标签并不能被解析出来,而DEDECMS官方论坛上也没有找到相关的解决办法, ...
- nginx 环境搭建使用之入门
1.http://nginx.org/下载最新的nginx 现在最新的版本是nginx-1.9.1 下载.tar.gz包 ,解压. timeless@timeless-HP-Pavilion-g4 ...
- 那些年被我坑过的Python——你来我往(第九章 selectors)
进程.线程.协程(微线程).队列的概念理解 进程进程是所有相关资源的集合,而线程是和CPU交互的最小单元进程至少包含一个线程,是主线程线程线程之间可以共享资源线程同时修改同一份数据时必须加锁,mute ...
- 项目知识点.Part3
内存管理: 基本数据类型或者Core Foundation对象都没有引用计数 主线程会自动创建释放池,子线程需要手动创建释放池. 具体的区别:http://www.cnblogs.com/langti ...
- C语言知识总结
明白一些变量 熟悉一些语句 组合一些函数 C语言——>库 帮你写好放在库中 魔数 凭空变出来的数字,不知道 数字表示的含义,影响代码的可读性. C语音的参数传递 非常特殊,传递的是一个替身. ...