<题目链接>

题目大意:

现在给你一些点,这些点之间存在一些有向边,每条边都有对应的边权,有一次机会能够使某条边的边权变为原来的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 其他 MBeans 和高 CPU 消耗线程

    其他 MBeans 希望监控 Hibernate 和 Hazelcast(仅针对 Confluence 数据中心)你需要在你的 setenv.sh / setenv.bat 文件中添加下面的内容. s ...

  2. iOS ibeacon 使用详解

    前段时间写项目,设计到了通过蓝牙ibeacon 的方式接收数据,最开始自己都之前都没听过什么叫ibeacon,然后就开始查资料,慢慢的也了解并知道了ibeacon怎么使用了.先大概解释下ibeacon ...

  3. Django Rest Framework(2)

    目录 一.认证 二.权限 三.限制访问频率 四.总结 一.认证(补充的一个点) 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from rest ...

  4. BeautifulSoup的基本用法

    # -*- coding:UTF-8 -*- from urllib import request from bs4 import BeautifulSoup import re import sys ...

  5. 《剑指offer》 跳台阶

    本题来自<剑指offer> 跳台阶 题目1: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: 同上一篇. C ...

  6. Appium Desired Capabilities

    Appium Desired Capabilities Desired Capabilities 是由 keys 和 values 组成的 JSON 对象. 举个简单例子: { "platf ...

  7. 阿里云人脸识别测试接口出错 返回Body:{ "errno": 1031, "err_msg": "Invalid Image URL.", "request_id": "cdbe2927-e1bb-4eb1-a603-8fcd4b0b7fc8" }

    错误信息如下 返回Body:{ "errno": 1031, "err_msg": "Invalid Image URL.", " ...

  8. 论文阅读笔记九:SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS (DeepLabv1)(CVPR2014)

    论文链接:https://arxiv.org/abs/1412.7062 摘要 该文将DCNN与概率模型结合进行语义分割,并指出DCNN的最后一层feature map不足以进行准确的语义分割,DCN ...

  9. js基本类型和字符串的具体应用

    变量 JavaScript 是一种弱类型语言,javascript的变量类型由它的值来决定. 定义变量需要用关键字 'var' var a = 123; var b = 'asd'; //同时定义多个 ...

  10. openstack 基础

    一:openstack起源: 1.rackspace和NASA(美国国家航空航天局)共同发起的开源项目 1.1/rackspace:贡献的swaft子项目(存储组件) 1.2/NASA:贡献了nova ...