poj1511 最短路
题意:与poj3268一样,所有人需要从各点到一点再从一点到各点,求最短路总和。
与poj3268一样,先正向建图跑 dijkstra ,得到该点到其他所有各点的最短路,即这些人回去的最短路,再用反向建的图跑一遍最短路,得到各点到该点的最短路,求和就行了。
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<queue> 5 #include<vector> 6 using namespace std; 7 typedef pair<int,int> pii; 8 typedef long long ll; 9 const int MAXM=1000000; 10 struct cmp{ 11 bool operator ()(pii a,pii b){ 12 return a.first>b.first; 13 } 14 }; 15 16 int head1[MAXM+5],point1[MAXM+5],val1[MAXM+5],next1[MAXM+5],size1; 17 int head2[MAXM+5],point2[MAXM+5],val2[MAXM+5],next2[MAXM+5],size2; 18 int n,m; 19 int dist1[MAXM+5],dist2[MAXM+5]; 20 21 void add1(int a,int b,int v){ 22 point1[size1]=b; 23 val1[size1]=v; 24 next1[size1]=head1[a]; 25 head1[a]=size1++; 26 } 27 28 void add2(int a,int b,int v){ 29 point2[size2]=b; 30 val2[size2]=v; 31 next2[size2]=head2[a]; 32 head2[a]=size2++; 33 } 34 35 void dij(int s){ 36 int i; 37 priority_queue<pii,vector<pii>,cmp>q; 38 memset(dist1,0x3f,sizeof(dist1)); 39 memset(dist2,0x3f,sizeof(dist2)); 40 dist1[s]=dist2[s]=0; 41 q.push(make_pair(dist1[s],s)); 42 while(!q.empty()){ 43 pii u=q.top(); 44 q.pop(); 45 if(u.first>dist1[u.second])continue; 46 for(i=head1[u.second];~i;i=next1[i]){ 47 int j=point1[i]; 48 if(dist1[j]>dist1[u.second]+val1[i]){ 49 dist1[j]=dist1[u.second]+val1[i]; 50 q.push(make_pair(dist1[j],j)); 51 } 52 } 53 } 54 while(!q.empty())q.pop(); 55 q.push(make_pair(dist2[s],s)); 56 while(!q.empty()){ 57 pii u=q.top(); 58 q.pop(); 59 if(u.first>dist2[u.second])continue; 60 for(i=head2[u.second];~i;i=next2[i]){ 61 int j=point2[i]; 62 if(dist2[j]>dist2[u.second]+val2[i]){ 63 dist2[j]=dist2[u.second]+val2[i]; 64 q.push(make_pair(dist2[j],j)); 65 } 66 } 67 } 68 ll ans=0; 69 for(i=1;i<=n;i++){ 70 ans+=dist1[i]; 71 ans+=dist2[i]; 72 } 73 printf("%I64d\n",ans); 74 } 75 76 int main(){ 77 int t; 78 scanf("%d",&t); 79 for(int q=1;q<=t;q++){ 80 scanf("%d%d",&n,&m); 81 int i,a,b,v; 82 memset(head1,-1,sizeof(head1)); 83 size1=0; 84 memset(head2,-1,sizeof(head2)); 85 size2=0; 86 for(i=1;i<=m;i++){ 87 scanf("%d%d%d",&a,&b,&v); 88 add1(a,b,v); 89 add2(b,a,v); 90 } 91 dij(1); 92 } 93 94 return 0; 95 }
View Code
转载于:https://www.cnblogs.com/cenariusxz/p/4785251.html
poj1511 最短路相关推荐
- poj1511 InvitationCards 最短路 Dijkstra堆优化
第一反应想到和 poj3268做法一样,先是从起点dj,然后将图反向,再次dj一次,求和即可.但是,数据O(n*n)过不去,所以需要使用dijkstra的堆优化! 淦,没用scanf结果超时了= = ...
- [C] [最短路] 只有5行的算法:Floyd-Warshall
终于学到求最短路了,终于来到我最喜欢的算法--Floyd-Warshall了!今天还有点小激动呢! 我喜欢它,当然是因为它逻辑十分简单咯!真的只有5行诶! Floyd-Warshall算法 题目描述 ...
- BZOJ4152 AMPPZ2014 The Captain(最短路)
事实上每次走到横坐标或纵坐标最接近的点一定可以取得最优方案.于是这样连边跑最短路就可以了. #include<iostream> #include<cstdio> #inclu ...
- Codeforces.1051F.The Shortest Statement(最短路Dijkstra)
题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚 ...
- BZOJ1491: [NOI2007]社交网络(Floyd 最短路计数)
Time Limit: 10 Sec Memory Limit: 64 MB Submit: 2343 Solved: 1266 [Submit][Status][Discuss] Descrip ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- E:By Elevator or Stairs? CF595 DP最短路
题目链接 比赛的时候一看,这不是最短路吗,然后敲了一个最短路. 然后比赛完发现大家基本都写的dp,我真是个憨憨,dp3行 最短路就建个简单的图,dp就是从上一维转化过来就是了 优秀的dp: //#pr ...
- The Shortest Statement CodeForces - 1051F LCA+最短路
太弱了... 一开始看到题感觉是跑一个最小生成树在上边进行LCA就行了,但是发现过不了样例,然后就是就想到了之前做过类似做法的题目,就是非生成树上的边最多只有21条,然后就那些边记录下来,通过每一条边 ...
- JZOJ #4722 跳楼机 (最短路模型的完美转化)
题目描述: 给出$h,x,y,z$,求在$h$以内,$x,y,z$可以凑出多少个不同的数.$(1\leq{h}\leq{10^{18}},1\leq{x,y,z}\leq{10^5})$ 解题思路: ...
- matlab单机无限大系统_基于MATLAB的单机无穷大系统短路故障分析_吕鹏
_______________________________电子技术__丝I 基于MA丁LAB的单机无穷大系统短路故障分析 山东科技大学吕鹏钟家成纪妮妮李漫漫 [摘要]本z l),NIATLAB7. ...
最新文章
- create-react-app 2.0中使用antd(eject)
- 撒花!算法岗必须复现的上百篇经典论文代码完结啦! | 附下载链接
- C语言简单题-找最大的字符串
- 百度Ueditor编辑器wordimage踩坑
- 计算机网络——物理层设备
- htm怎么让图片和搜索框在同一行_对于优化来说,内链应该怎么使用你知道吗?...
- Web前端开发技术概述
- 矩阵分析_二阶矩阵A为酉矩阵的充分必要条件是A为下列三种形式之一
- Xshell脚本实现自动登陆||自动登陆的几种方式。
- Datax-web版安装(含安装包)
- MVC中的ViewData、ViewBag和TempData
- 从尾到头打印链表(C++和Python 实现)
- 【JS】常用js方法
- barrier linux,Linux Barrier I/O 实现分析笔记
- 随机事件的关系及运算
- Vue项目提高页面加载速度的方法
- 同程旅游——Java开发面经
- HTML样式中移动鼠标到指定位置改变光标形状
- GB 50312-2007 综合布线工程验收规范(含条文说明)
- 自助下单彩虹云商城系统2023最新免授权独立版源码安装教程
热门文章
- PHP比较两个时间戳相差天时分秒
- 利用ajax查询数据库显示在前台,ajax动态查询数据库数据并显示在前台的方法
- Matlab函数——wgn
- 修改JDK的经历:两处字体的粗体代码引起的错误
- onfigure: error: cannot find install-sh, install.sh, or shtool in
- configure: error: Can‘t find ext2fs library
- 代码管理学:安排新员工看代码,因为主管不会管理,不负责任
- LINUX打印机报错:ipp error(1034, client-error-document-format-not-supported)
- LINUX搭建EtherCalc环境
- LINUX上安装openjdk