<题目链接>

题目大意:

现在给你一些点,这些点之间存在一些有向边,每条边都有对应的边权,有一次机会能够使某条边的边权变为原来的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】的更多相关文章

  1. hdu 3499 Flight (最短路径)

    Flight Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Su ...

  2. HDU 3499 Flight spfa+dp

    Flight Time Limit : 20000/10000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Subm ...

  3. [USACO09FEB] Revamping Trails 【分层图+Dijkstra】

    任意门:https://www.luogu.org/problemnew/show/P2939 Revamping Trails 题目描述 Farmer John dutifully checks o ...

  4. 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa

    3627: [JLOI2014]路径规划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 70[Submit][Status] ...

  5. 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 ...

  6. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级——分层图+dijkstra

    Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i ...

  7. 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 ...

  8. HDU-3499Flight (分层图dijkstra)

    一开始想的并查集(我一定是脑子坏掉了),晚上听学姐讲题才知道就是dijkstra两层: 题意:有一次机会能使一条边的权值变为原来的一半,询问从s到e的最短路. 将dis数组开成二维,第一维表示从源点到 ...

  9. bzoj1922 [SDOI2010]大陆争霸 分层图

    问题描述 幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举 ...

随机推荐

  1. swift 学习- 15 -- 构造过程 01

    // 构造过程 是使用类,结构体 或 枚举类型的实例之前的准备过程, // 在新实例可用前必须执行这个过程, 具体操作包括 设置实例中每个存储型属性的初始值 和 执行其他必须的设置 或 初始化工作 / ...

  2. 一种基于NTC的控温电路及软件实现

    NTC(Negative Temperature Coefficient)是一种随温度上升时,电阻值呈指数关系减小的热敏电阻.应用广泛,最近我们就采用了NTC来控制加热并测温,并达到了预期的效果. 1 ...

  3. Confluence 6 开始使用

    欢迎来到 Confluence 的开始使用指南文档.在这个稳定中,你将会找到有关对 Confluence 进行评估的指南和其他的一些有用的内容.当你开始使用 Confluence 的时候,这些信息能够 ...

  4. BeautifulSoup的基本操作

    >>> from bs4 import BeautifulSoup   #导入 >>> soup = BeautifulSoup(url.content," ...

  5. 【mysql】删除字段的最后一个字符

    场景:在存入16进制id时,由于转换失误,得到的结果是0x1001L的格式,我希望转换为0x1001,去掉最后的L 指令: update tb_test set hexid=left(hexid, l ...

  6. 简单(基本)的风光摄影照片后期处理-新手教程-ps照片后期基本处理

    前言 Photoshop虽然不是万能的,但缺少Photoshop却是万万不能的!风光摄影不是一个记录过程,做到的不能仅仅是“拍到了”,我觉得应该是一个创作的过程,特别是在后期处理的过程中,创作意味更浓 ...

  7. linux下mysql源码安装

    参考链接:http://blog.csdn.net/zqtsx/article/details/9378703 下载mysql安装包, 不会下载点这里 地址:ftp://mirror.switch.c ...

  8. 基于“MVC”框架集设计模式,开发用户管理系统!

    MVC----(Model View Controller)设计模型: M:表示业务数据和业务规则.包括DAO(beans).DBHelper(DBHelper),用于封装数据库连接,业务数据库处理. ...

  9. MongoDB数据库备份与还原、单表的导入导出

    -------------------MongoDB备份与恢复------------------- 1.MongoDB数据库备份     1.语法:         mongodump -h dbh ...

  10. 51 Nod 1079 中国剩余定理(孙子定理)NOTE:互质情况

    1079 中国剩余定理 一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % 2 = 1, K % 3 = 2, K % 5 = 3.符合条件的最小的K = 23. 收起 ...