给一个无向图,有的边是特殊边,最多可以取一条特殊边,求最短路,并且输出路径。

这样考虑,加入所有非特殊边,求出每个点到起点和终点的最短路。
然后加入特殊边的时候,如果取当前这条特殊边,那么答案会是两点预处理路径长度加上该边长。直接保存最小答案即可。

不过注意输出的格式还有一些其他的问题,还有加特殊边的时候要考虑是那一端连接起点终点。。。。

召唤代码君:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define maxn 222000
using namespace std; struct heapnode{
int D,U;
bool operator < (heapnode V) const{
return D>V.D;
}
};
const int inf=~0U>>;
int to[maxn],next[maxn],c[maxn],first[maxn],edge;
int dis1[maxn],dis2[maxn],from1[maxn],from2[maxn];
bool done[maxn];
int n,m,s,t,k,ans,len; void _init()
{
edge=-;
for (int i=; i<=n; i++)
first[i]=-,dis1[i]=inf,dis2[i]=inf,from1[i]=-,from2[i]=-;
} void addedge(int U,int V,int W)
{
edge++;
to[edge]=V,c[edge]=W,next[edge]=first[U],first[U]=edge;
edge++;
to[edge]=U,c[edge]=W,next[edge]=first[V],first[V]=edge;
} void dijkstra(int nd,int dis[],int from[])
{
for (int i=; i<=n; i++) done[i]=false;
priority_queue<heapnode> Q;
Q.push((heapnode){,nd}),dis[nd]=;
while (!Q.empty())
{
heapnode cur=Q.top();
Q.pop();
if (done[cur.U]) continue;
else done[cur.U]=true;
for (int i=first[cur.U]; i!=-; i=next[i])
if (dis[cur.U]+c[i]<dis[to[i]])
dis[to[i]]=dis[cur.U]+c[i],from[to[i]]=cur.U,Q.push((heapnode){dis[to[i]],to[i]});
}
} void _input()
{
int U,V,W;
scanf("%d",&m);
while (m--)
{
scanf("%d%d%d",&U,&V,&W);
addedge(U,V,W);
}
dijkstra(s,dis1,from1);
dijkstra(t,dis2,from2);
} void output(int cur)
{
if (cur==-) return ;
output(from1[cur]);
printf("%d ",cur);
} int main()
{
int U,V,W,UU,VV,T=;
while (scanf("%d%d%d",&n,&s,&t)!=EOF)
{
if (T++) puts("");
_init();
_input();
UU=-,len=dis1[t];
scanf("%d",&m);
while (m--)
{
scanf("%d%d%d",&U,&V,&W);
if (dis1[U]+dis2[V]+W<len)
len=dis1[U]+dis2[V]+W,UU=U,VV=V;
if (dis1[V]+dis2[U]+W<len)
len=dis1[V]+dis2[U]+W,UU=V,VV=U;
}
if (UU==-)
{
output(from1[t]);
printf("%d\nTicket Not Used\n%d\n",t,len);
}
else
{
output(UU);
printf("%d",VV);
for (int k=VV; from2[k]!=-; k=from2[k])
printf(" %d",from2[k]);
printf("\n%d\n%d\n",UU,len);
}
}
return ;
}

UVA11374_Airport Express的更多相关文章

  1. 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版

    背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...

  2. 【原】无脑操作:express + MySQL 实现CRUD

    基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...

  3. Express 教程 01 - 入门教程之经典的Hello World

    目录: 前言 一.Express?纳尼?! 二.开始前的准备工作 三.测试安装之经典的Hello World 四.使用express(1)来生成一个应用程序 五.说明 前言: 本篇文章是建立在Node ...

  4. VisualStudio 2015 开启IIS Express可以调试X64项目

    现在项目开发时总有时需要在X64下开发,这样我们就需要IIS Express中调试.不要总是放在IIS中,在Attach这样好慢.   如果不设置直接调试X64的程序,我们有可能会受到以下类似的错误 ...

  5. Node.js Express连接mysql完整的登陆注册系统(windows)

    windows学习环境: node 版本: v0.10.35 express版本:4.10.0 mysql版本:5.6.21-log 第一部分:安装node .Express(win8系统 需要&qu ...

  6. Node.js实现RESTful api,express or koa?

    文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...

  7. express全局安装后无法通过require使用

    今天入门了一下express,首先安装依赖. npm install express -g; npm install body-parser -g; npm install cookie-parser ...

  8. 初步认识Node 之Express

    通过本文,你会对Express有一个较为具体的了解.    起源 2009年6月26日,TJ Holowaychuk提交了Express的第一次commit,接下来在2010年1月2日,有660次co ...

  9. 安装nodejs express框架时express命令行无效

    我也是看了这篇才明白.http://jingyan.baidu.com/article/922554468a3466851648f419.html 最近在看一本书,nodejs开发指南.至于出现这个问 ...

随机推荐

  1. springmvc配置中,mapper一直依赖注入不进去的问题记录

    问题还原: service层在引用mapper层接口时,一直依赖注入不进去.查看spring-context.xml配置,也未发现异常[因为以前就是这么配置],但是始终无法注入. 原因: 问题不出在s ...

  2. Python科学计算库-Numpy

    NumPy 是 Python 语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,也是学习 python 必学的一个库. 1. 读取文件 numpy.gen ...

  3. Python3中isdigit(), isdecimal(), isnumeric()的区别和字符串的常用方法

    # 全部小写 string.lower() # 全部大写 string.upper() # 是否全部小写 string.islower() # 是否全部大写 string.isupper() # 首字 ...

  4. Received non-all-whitespace CHARACTERS or CDATA event in nextTag(). ,无法整齐打印验证错误。 解析XML文档出现的问题

    在启动keyCloak,想要在standAlone模式下切换数据库,修改standAlone.xml文件时. 在bin/目录下启动standAlone模式出现错误: 10:07:24,799 INFO ...

  5. leetcode刷题笔记191 位1的个数

    题目描述: 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量). 示例: 输入: 输出: 解释: 32位整数 的二进制表示为 . 题目分析: 判断3 ...

  6. docker server gave HTTP response to HTTPS client 问题处理办法

    vi /etc/docker/daemon.json [root@localhost ~]# cat /etc/docker/daemon.json {"insecure-registrie ...

  7. DevOps on AWS之OpsWorks初体验

    AWS OpsWorks 是一款配置管理服务,提供 Chef 和 Puppet 的托管EC2虚拟机实例.Chef 和 Puppet 是自动化平台,允许用户使用代码来自动配置服务器.用户借助OpsWor ...

  8. rest_framework_api规范

    目录 一.什么是RESTful 二.什么是API 三.RESTful API规范 四.基于Django实现API 五.基于Django Rest Framework框架实现 一. 什么是RESTful ...

  9. 自定义UIView怎么注册销毁NSNotification通知

    问题描述:在使用天猫tangram框架后.部分组件自定义后会用到通知,但是在iOS 8 系统中,会崩溃? 原因分析:当对象挂掉后,要对应移除注册的通知. 否则当你重复执行发送通知的时候,在iOS8 系 ...

  10. 2017秋软工 - 本周PSP

    1. PSP 2. PSP饼状图 3. 进度条 4. 累计进度图