<题目链接>

题目大意:

现在给你一些点,这些点之间存在一些有向边,每条边都有对应的边权,有一次机会能够使某条边的边权变为原来的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. Confluence 6 的 WebDAV 客户端整合介绍

    WebDAV 允许用户通过一个 WebDAV 客户端来访问 Confluence.例如,微软 Windows 的 'My Network Places'.通过为访问的用户提供权限,这个用户可以在 Co ...

  2. vue element-UI 升级报错Cannot find module "element-ui/lib/theme-default/index.css"

    饿了么 用之前的版本 有些组件跟api 不一样了所以更新了最新的版本,发现 报一堆错误 主要错误是这个 Cannot find module "element-ui/lib/theme-de ...

  3. dubbo源码之服务消费

    消费端启动初始化过程: 消费端的代码解析也是从配置文件解析开始的,服务发布对应的<dubbo:service,解析xml的时候解析了一个ServiceBean,并且调用ServiceConfig ...

  4. LeetCode(2): 两数相加

    本内容为LeetCode第二道题目:两数相加 # -*- coding: utf-8 -*- """ Created on Sun Mar 10 10:47:12 201 ...

  5. PDF文件编辑技巧之PDF书签怎么设置

    纸质的文件想要添加书签就直接拿笔书写就可以,Word文件怎么添加书签相信大家也都知道,那么PDF文件的书签要怎么设置的呢,是不是有很多小伙伴不知道该怎么做呢,不要担心,今天小编就来跟大家分享一下在PD ...

  6. mysql 文件导入

    load data infile 文件路径 into table 表 fields terminated by ',' lines terminated '\n'

  7. windows_agent 添加

    一:复制windows agent文件和.exe文件到c:\zabbix\目录下 二:配置zabbix_agentd.win.conf文件 hostname:设置为自定义名称,但是要和zabbix-s ...

  8. OOP和面向对象

    OOP具有三大特点 1.封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法.于是开发人员只 需要关注这个类如何使用,而不用去关 ...

  9. python练习册0006

    第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. import re import os def get_li ...

  10. Kubeadm安装的K8S集群1年证书过期问题的解决思路

    这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...