poj 1511 Invitation Cards
最短路
题意: 强调是有向图 , n个点(1到n标号)m条边,求出点1到所有点的最短路之和 + 所有点到点1的最短路之和
什么?求一次最短路,然后 x 2 就是答案? 这样是错的,如果是无向图的话可以这样,因为可以逆回去走。但是有向图显然不是,点1到点a的最短路,和点a到点1的最短路是完全不同的,值不同走过的路径也不同.要求点1到所有点的最短路,直接运行一次最短路即可。但是要求所有点到点1的最短路,难道要对所有点运行一次最短路吗?一看点数就可以否定这个想法。可以这样想,如果点a到点1存在最短路,那么把这条路径的边全部取反,就是点1到点a的最短路了。所有在求了第1次最短路后,将 整个图的边取反,再求一次点1到所有点的最短路就行了,可以知道边都取反后,第一次走过的路径都不会再走到(都取反了),而从点a可能到点1的可能的边都成了点1到点a的可能的边
代码用了spfa算法,用queue和stack来辅助对时间的影响不大,但是stack稍快一点(只从上次后我发现其实stack都比queue快,一般情况下,更不用题特殊情况了)
另外用dij+heap也行,朴素的dij应该是超时的,虽然没写
#include <cstdio> #include <cstring> #include <queue> #include <stack> using namespace std; #define N 1000010 #define INF 0x3f3f3f3ftypedef long long ll; ll d[N]; int n,tot; int head[N]; bool ins[N]; struct edge {int u,v,w,next; }e[N],tt[N];void add(int u ,int v ,int w , int k) {e[k].u = u;e[k].v = v;e[k].w = w;e[k].next = head[u];head[u] = k; }ll spfa_stack() {stack<int>sta;memset(d,0x3f,sizeof(d));memset(ins,false,sizeof(ins));while(!sta.empty()) sta.pop();d[1] = 0;ins[1] = true;sta.push(1);while(!sta.empty()){int u = sta.top();sta.pop();ins[u] = false;for(int k=head[u]; k!=-1; k=e[k].next){int v =e[k].v;int w = e[k].w;if( d[u] + w < d[v] ){d[v] = d[u] + w;if(!ins[v]){ins[v] = true;sta.push(v);}}}}ll res = 0;for(int i=1; i<=n ; i++)res += d[i];return res; }int main() {int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&tot);memset(head,-1,sizeof(head));for(int i=0; i<tot; i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);tt[i].u = u; tt[i].v = v; tt[i].w = w;add(u,v,w,i);}ll suma = spfa_stack();memset(head,-1,sizeof(head));for(int i=0; i<tot; i++)add(tt[i].v , tt[i].u , tt[i].w , i);ll sumb = spfa_stack();printf("%lld\n",suma+sumb);}return 0; }
转载于:https://www.cnblogs.com/scau20110726/archive/2013/05/04/3060299.html
poj 1511 Invitation Cards相关推荐
- POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图
[题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...
- POJ 1511 Invitation Cards(双向最短路)
[题目链接] http://poj.org/problem?id=1511 题目意思 给n个点,m条有向边.问你从1到其他n-1各点的最短路和加上从n-1各点到1的最短路. 解题思路 因为是有向边而且 ...
- POJ 1511 Invitation Cards(最短路径,dijkstra 模板题)
题目意思: 在有向图中,求1到所有点的最短路之和 + 所有点到1的最短路之和. 本题要点: 1.先求1点 到其他点的单源最短路径 d[i](1 <= i <= n), 用 dijkstra ...
- pku 1511 Invitation Cards
一道好题,练习静态表(邻接矩阵的数组开不下),没写过静态表,参考http://www.cnblogs.com/cykun/archive/2011/01/19/1939542.html 写的,改用st ...
- Invitation Cards——正反最短路
poj 1511: Invitation Cards 题意:点1到其他点的最短距离+其他点到点1的最短距离 的总和. 1.双向建图 正向建图是1到其他点的距离,反向建图则是其他点到1的距离. 2.数据 ...
- J - Invitation Cards POJ - 1511
J - Invitation Cards POJ - 1511 题意: 共有 n 个站点,n 个志愿者从1 出发,分别到达不同的站点,晚上全部回到 1 ,求他们总的最小花费是多少? 思路: 首先想到从 ...
- Invitation Cards POJ - 1511【最短路】
Invitation Cards POJ - 1511 题目 思路:建两张图,一张正向一张反向,先在正向图里求一遍一号点到所有点的距离,再在反向图里求一遍,反向图里一号点到所有点的距离的意思是所有点到 ...
- Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))
题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...
- 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)
题干: In the age of television, not many people attend theater performances. Antique Comedians of Mali ...
最新文章
- java开发事故如何处理_记一次缓存事故
- 使用dwebsocket在Django中使用Websocket
- 脉位调制解调 matlab,通信原理与matlab仿真v2 第五章 DBPSK调制解调器(1)
- oracle consistent gets,Oracle buffer cache理解之七——统计信息!
- python导入第三方库dlib报错解决
- 微波烹调,营养损失多or少?
- 群晖transmission 下载失败 权限设置 permission denied
- origin作功率谱图
- dns服务器功能作用,DNS服务的用途介绍
- MyBatis连接池的实现原理分析
- html显示空间图片,qq空间显示不出来 为什么QQ空间有些图片显示不了
- 你来分我先选 原则
- “爱心助农”成绩单公布,淘宝何以成为最大舞台?
- 【202209秋招软开银行面试C++】
- 详解opencv的HOG描述子维度数目的计算原理
- 迪士尼机器人芭蕾舞_迪士尼“跳跳虎”机器人来了!
- SVN服务端和客户端搭建教程
- SharePoint Portal Server 2007 文档管理和用户管理的总结
- 抽象工厂模式-Abstract Factory Pattern
- 论文翻译:Text-based Image Editing for Food Images with CLIP
热门文章
- 如何实现响应式布局?
- PHP 登录DEMO
- (转)open gl 实例 demo ---vs2005 环境
- 【Basking Rootwalla】真正理解setup time/hold time(二)
- Windows下安装配置ant
- jupyter新建文件_Jupyter渲染网页的3种方式
- ES基础概念和集群概念
- VUE中出现 Cannot read property ‘length‘ of undefined 的错误
- 计算机vf的讲解,计算机二级vf重点知识讲解.doc
- java hashcode 多少位_hash-为什么XOR通常在Java hashCode()中使用,而很少使用按位运算符?...