【题目链接】
http://poj.org/problem?id=1511

题目意思

给n个点,m条有向边。问你从1到其他n-1各点的最短路和加上从n-1各点到1的最短路。

解题思路

因为是有向边而且一次终点在1,一次起点在1,所以只要跑一遍正的图在跑遍反的地图,总和就是要的答案。
坑点在于数据比较大总和要用long long,邻接表开两个时间就会wa,要用优先队列优化。

代码部分


#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <string>
#include <map>
using namespace std;
#define LL long long
#define inf 0x3f3f3f3f
const int N = 1e6+5;
LL dis[N];   ///存储正向最短路
int vis[N];  ///记录是否在队列
int k,n;
struct node
{int v;LL w;friend bool operator < (node a,node b)  {return a.w>b.w;}
}s;
struct edge
{int u,v,w;
}eg[N];
vector<vector<node> >m(N);
void init ()
{for (int i = 1; i <= n; i++){dis[i] = inf;vis[i] = 0;}
}
node add (int v,LL w) ///转换成node类型
{node t;t.v = v;t.w = w;return t;
}
void spfa()
{init();priority_queue<node>q;q.push(add(1,0));vis[1] = 1;dis[1] = 0;while (!q.empty()){node t = q.top();q.pop();for (int i = 0; i < m[t.v].size();i++){s = m[t.v][i];if (dis[s.v] > dis[t.v]+s.w)  ///松弛 {dis[s.v] = dis[t.v]+s.w;if (!vis[s.v])   ///判断是否在队列 {q.push(add(s.v,dis[s.v]));vis[s.v] = 1;}}}vis[t.v] = 0;}
}
int main()
{int t;scanf("%d",&t);while (t--){LL ans = 0;scanf("%d %d",&n,&k);for (int i = 1; i<= n; i++){m[i].clear();}for(int i =0; i < k;i++){int v,u,w;scanf("%d %d %d",&eg[i].u,&eg[i].v,&eg[i].w);m[eg[i].u].push_back(add(eg[i].v,eg[i].w));}spfa();for (int i = 1;i<= n ;i++)  /// 求和并清除图 {  ans += dis[i];m[i].clear();} for (int i = 0; i <= k; i++)  ///构造方向图 {m[eg[i].v].push_back(add(eg[i].u,eg[i].w));}spfa();for (int i = 1; i <= n; i++)ans += dis[i];printf("%lld\n",ans);}return 0;
}

POJ 1511 Invitation Cards(双向最短路)相关推荐

  1. POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图

    [题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...

  2. poj 1511 Invitation Cards

    最短路 题意:  强调是有向图 , n个点(1到n标号)m条边,求出点1到所有点的最短路之和 + 所有点到点1的最短路之和 什么?求一次最短路,然后 x 2 就是答案? 这样是错的,如果是无向图的话可 ...

  3. POJ 1511 Invitation Cards(最短路径,dijkstra 模板题)

    题目意思: 在有向图中,求1到所有点的最短路之和 + 所有点到1的最短路之和. 本题要点: 1.先求1点 到其他点的单源最短路径 d[i](1 <= i <= n), 用 dijkstra ...

  4. Invitation Cards——正反最短路

    poj 1511: Invitation Cards 题意:点1到其他点的最短距离+其他点到点1的最短距离 的总和. 1.双向建图 正向建图是1到其他点的距离,反向建图则是其他点到1的距离. 2.数据 ...

  5. pku 1511 Invitation Cards

    一道好题,练习静态表(邻接矩阵的数组开不下),没写过静态表,参考http://www.cnblogs.com/cykun/archive/2011/01/19/1939542.html 写的,改用st ...

  6. Invitation Cards POJ - 1511【最短路】

    Invitation Cards POJ - 1511 题目 思路:建两张图,一张正向一张反向,先在正向图里求一遍一号点到所有点的距离,再在反向图里求一遍,反向图里一号点到所有点的距离的意思是所有点到 ...

  7. 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)

    题干: In the age of television, not many people attend theater performances. Antique Comedians of Mali ...

  8. J - Invitation Cards POJ - 1511

    J - Invitation Cards POJ - 1511 题意: 共有 n 个站点,n 个志愿者从1 出发,分别到达不同的站点,晚上全部回到 1 ,求他们总的最小花费是多少? 思路: 首先想到从 ...

  9. Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))

    题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...

最新文章

  1. 修图动口不动手,有人把StyleGAN和CLIP组了个CP,能听懂修图指令那种
  2. ThreadLocal_OSIV模式_FIlter_Web ajax
  3. 使用 Azure PowerShell 管理 Azure 虚拟网络和 Windows 虚拟机
  4. 苹果新专利曝光,可通过GPS和视觉识别器来识别车辆
  5. 中国制造业加速拥抱云计算 产业规模达1500亿
  6. 使用xmodmap修改键盘映射
  7. 2021年高考成绩查询海南时间,2021年海南高考后多久出成绩,附海南高考成绩查询时间入口方式...
  8. MongoDB可视化工具MongoChef永久有效
  9. ionic android 证书,Ionic 5/Angular Android和iOS 指纹认证
  10. Vulkan同步机制和图形-计算-图形转换的风险(一)
  11. SMARTS决策引擎实战练习
  12. java word创建表格_Java 在Word中创建表格
  13. 同步系统时间与硬件时钟
  14. linux 路由转发 ipv6,IPv6路由
  15. XiaoHu.ai开发日志(自2018年2月6日至2019年4月11日)
  16. ShaderJoy —— 仿抖音的十字星光效果 【GLSL】
  17. cmd进入dos命令运行java文件报错找不到无法加载类
  18. c语言调用子函数程序,函数的调用
  19. 做APP哪家公司好, APP软件开发的公司?
  20. STM32学习笔记:FLASH读写之一

热门文章

  1. AndroidManifest.xml详解(上)
  2. Linux 之父:林纳斯·托瓦兹(Linus Torvalds)
  3. 计算机代码rsi是什么意思,自编RSI指标
  4. 布丁浅谈之Linux常用基本命令
  5. 如何用 Python 让你的 PPT 数据动起来?
  6. AI人工智能洗稿「OpenAI GPT-3模型」
  7. Java中的逻辑控制与方法(上)
  8. 2022N1叉车司机考题及答案
  9. 开源世界里乱象横生,该如何规制?
  10. 理解选择排序的不稳定性