hdu 3499 flight 【分层图】+【Dijkstra】
<题目链接>
题目大意:
现在给你一些点,这些点之间存在一些有向边,每条边都有对应的边权,有一次机会能够使某条边的边权变为原来的1/2,求从起点到终点的最短距离。
解题分析:
分层图最短路模板题,由于最多只能将一条边变成原来的1/2,所以我们在原来二维的图形上多加一层,由第一层到第二层的边代表该边边权为原边权的1/2。就按这种思想跑一遍Dijkstra即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <string>
#include <map>
#include <iostream>
using namespace std; typedef long long ll;
#define INF 1e18
const int N=1e5+;
const int M=5e5+;
int n,m,cnt,head[N];
bool vis[N][]; struct DEGE{
int to,next;
ll val;
}edge[M];
struct NODE{
int loc,level;
ll dis;
bool operator <(const NODE &tmp)const{
return dis>tmp.dis;
}
NODE(int a=,int b=,ll c=){
loc=a,level=b,dis=c;
}
}d[N][];
void init(){
cnt=;
memset(head,-,sizeof(head));
memset(vis,false,sizeof(vis));
}
void add(int u,int v,ll w){
edge[++cnt].to=v,edge[cnt].val=w;
edge[cnt].next=head[u],head[u]=cnt;
}
void dij(int st){
for(int i=;i<=n;i++){
for(int j=;j<=;j++)
d[i][j].dis=INF; //将所有点到起点的距离置为无穷
}
d[st][].dis=;
priority_queue<NODE>q;
q.push(NODE(st,,));
while(!q.empty()){
NODE now = q.top();
q.pop();
int tmp1=now.loc,tmp2=now.level;
if(vis[tmp1][tmp2])continue;
vis[tmp1][tmp2]=true;
for(int i=head[tmp1];~i;i=edge[i].next){
int v=edge[i].to;
ll cost =edge[i].val;
if(d[v][tmp2].dis>d[tmp1][tmp2].dis+cost){
d[v][tmp2].dis=d[tmp1][tmp2].dis+cost;
q.push(NODE(v,tmp2,d[v][tmp2].dis));
}
if(tmp2==&&d[v][tmp2+].dis>d[tmp1][tmp2].dis+cost/){ //如果tmp1---->v之间的边变成原来值的1/2
d[v][tmp2+].dis=d[tmp1][tmp2].dis+cost/;
q.push(NODE(v,tmp2+,d[v][tmp2+].dis));
}
}
}
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
map<string,int>mpa;
init();
int tot=;
string st,ed;ll w;
for(int i=;i<=m;i++){
cin>>st>>ed>>w;
if(!mpa[st])mpa[st]=++tot; //如果这个字符串没有出现过,就给它编号
if(!mpa[ed])mpa[ed]=++tot;
add(mpa[st],mpa[ed],w); //建立有向边
}
cin>>st>>ed;
if(m==){printf("-1\n");continue;}
dij(mpa[st]);
ll ans=min(d[mpa[ed]][].dis,d[mpa[ed]][].dis);
ans==INF?printf("-1\n"):printf("%lld\n",ans);
}
return ;
}
2018-09-24
hdu 3499 flight 【分层图】+【Dijkstra】的更多相关文章
- hdu 3499 Flight (最短路径)
Flight Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Su ...
- HDU 3499 Flight spfa+dp
Flight Time Limit : 20000/10000ms (Java/Other) Memory Limit : 65535/65535K (Java/Other) Total Subm ...
- [USACO09FEB] Revamping Trails 【分层图+Dijkstra】
任意门:https://www.luogu.org/problemnew/show/P2939 Revamping Trails 题目描述 Farmer John dutifully checks o ...
- 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa
3627: [JLOI2014]路径规划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 186 Solved: 70[Submit][Status] ...
- Flight HDU - 3499 (分层最短路)
Recently, Shua Shua had a big quarrel with his GF. He is so upset that he decides to take a trip to ...
- bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级——分层图+dijkstra
Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i ...
- HDU - 3499 Flight 双向SPFA+枚举中间边
Flight Recently, Shua Shua had a big quarrel with his GF. He is so upset that he decides to take a t ...
- HDU-3499Flight (分层图dijkstra)
一开始想的并查集(我一定是脑子坏掉了),晚上听学姐讲题才知道就是dijkstra两层: 题意:有一次机会能使一条边的权值变为原来的一半,询问从s到e的最短路. 将dis数组开成二维,第一维表示从源点到 ...
- bzoj1922 [SDOI2010]大陆争霸 分层图
问题描述 幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举 ...
随机推荐
- 机器学习之高斯混合模型及EM算法
第一部分: 这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类 ...
- Oracle存储过程中跳出循环的写法
注:本文来源于: < Oracle存储过程中跳出循环的写法 > Oracle存储过程中跳出循环的写法 记录exit和return的用法 1:exit用来跳出循环 loop IF V_ ...
- Oracle imp exp 导入导出 执行脚本
一:用命令 imp/exp 的方式进行数据的导入和导出 一:文件后缀名: 二:oracle 导出 exp 命令 echo 开始备份数据库 if not exist D:\oracle_bak\fil ...
- Confluence 6 升级自定义的站点和空间仔细测试你的修改
修改可能对 Confluence 的后续版本不兼容,当你对 Confluence 进行升级的时候,你应该总是对你自定义修改的模板文件进行仔细的测试来确定所有的修改对新版本的 Confluence 兼容 ...
- web前端识别文字转语音
const msg = new SpeechSynthesisUtterance("hello world"); window.speechSynthesis.speak(msg) ...
- uva11754 中国剩余定理+暴力搜索
是当y的组合数较小时,暴力枚举所有组合,然后用中国剩余定理求每种组合的解,对解进行排序即可 注意初始解可能是负数,所以如果凑不够S个,就对所有解加上M,2M.... 当y的组合数较大时,选择一个k/x ...
- ES6 Promise 全面总结
转载:点击查看原文 ES6 Promise对象 ES6中,新增了Promise对象,它主要用于处理异步回调代码,让代码不至于陷入回调嵌套的死路中. @-v-@ 1. Promise本质 Promise ...
- 常见的爬虫分析库(2)-xpath语法
xpath简介 1.xpath使用路径表达式在xml和html中进行导航 2.xpath包含标准函数库 3.xpath是一个w3c的标准 xpath节点关系 1.父节点 2.子节点 3.同胞节点 4. ...
- Just Oj 2017C语言程序设计竞赛高级组A: 求近似值(矩阵快速幂)
A: 求近似值 时间限制: 1 s 内存限制: 128 MB 提交 我的状态 题目描述 求⌊(5–√+6–√)2n⌋⌊(5+6)2n⌋%9932017. 例如:n=1,(5–√+6–√)2( ...
- 一脸懵逼学习MapReduce的原理和编程(Map局部处理,Reduce汇总)和MapReduce几种运行方式
1:MapReduce的概述: (1):MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. (2):MapReduce由两个阶段组成:Map和Red ...