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

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

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

召唤代码君:

#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. spring整合ehcache注解实现查询缓存,并实现实时缓存更新或删除

    转载: http://www.importnew.com/23358.html 写在前面:上一篇博客写了spring cache和ehcache的基本介绍,个人建议先把这些最基本的知识了解了才能对今天 ...

  2. asp.net core结合NLog搭建ELK实时日志分析平台

    0.整体架构 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍ELK 1.说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp ...

  3. java多线程系列(二)---对象变量并发访问

    对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...

  4. Jsp中格式化时间戳的常用标签

    接下来一段时间的记录,虽然不是一些什么全新的知识,但是作为后台开发人员都是应该必须掌握的前端基础技能,说实话,每一个后台程序员的短板就在于前端技能的弱而造就了不能更上一层楼.从今天开始,我将彻底开启菜 ...

  5. 在初学Flask中遇到的小问题。

    今天初步认识到了Flask这个轻量级web开发框架.对于初步认识框架的我,暂时的有了一个小小的认识, 因为初学.也没有什么代码可供参开.一下的就是一个小小的例子. # 导包from flask imp ...

  6. SpringBoot实现监听redis key失效事件

    需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态 ...

  7. netbeans 类重复 解决

    Help -> About -> Cache directory 记录Cache directory目录 删除该目录下的所有文件 重启

  8. python3安装与环境配置和pip的基本使用

    本文环境 系统: Windows10 Python版本: 3.6 安装 python安装包下载 可以选择安装版和解压版 安装版一键安装, 安装过程注意选择安装位置, xx To Path选项(勾选), ...

  9. Swing的概述

    Swing在Java中是一个包,下面就是它的基本概述:简介: Java为了方便图形界面的实现, 专门设计了类库来满足各种各样的图形元素和用户交互事件, 该类库即为抽象窗口工具箱(Abstract Wi ...

  10. k8s踩坑记第1篇--rc无法创建

    六一快乐!!! 什么是k8s,我不想解释,百度资料有很多,本系列只踩坑,不科普. 问题描述: 做Hello World的例子,结果get pods一直显示没有资源? 应用配置代码: apiVersio ...