HDU-3499Flight (分层图dijkstra)
一开始想的并查集(我一定是脑子坏掉了),晚上听学姐讲题才知道就是dijkstra两层;
题意:有一次机会能使一条边的权值变为原来的一半,询问从s到e的最短路。
将dis数组开成二维,第一维表示从源点到点i的路径长度,第二维表示是否使用了该次机会,并以此不断更新。
用map将字符串转为int,剩下的就是dijkstra+优先队列;
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
#include<queue>
#define ll long long
#define INF 1e18
using namespace std; const int N = 1e5+10;
const int M = 5e5+10;
int tot,m,n; struct Edge
{
int v, cost, next;
}edge[M]; struct qnode
{
int loc,level;
ll dis;
bool operator < (const qnode &t) const {
return dis > t. dis;
}
qnode(int a=0,int b=0,ll c=0){
loc=a,level=b,dis=c;
}
}d[N][2]; int head[M];
bool vis[N][2]; void addedge(int u, int v, ll w)
{
edge[tot]. v = v;
edge[tot]. cost = w;
edge[tot]. next = head[u];
head[u] = tot ++;
} void dijkstra(int st)
{
memset(vis, 0, sizeof(vis));
for(int i=1;i<=n;i++){
for(int j=0;j<=1;j++){
d[i][j].dis=INF;
}
}
d[st][0].dis = 0;
priority_queue <qnode> q;
q. push(qnode(st,0,0));
while(! q. empty()){
qnode t = q. top();
q. pop();
int t1=t.loc,t2=t.level;
if(vis[t1][t2])continue;
vis[t1][t2]=true;
for(int i = head[t1]; i != -1; i = edge[i]. next){
int v = edge[i]. v;
int cost = edge[i]. cost;
if( d[v][t2].dis > d[t1][t2].dis + cost){
d[v][t2].dis = d[t1][t2].dis + cost;
q. push(qnode(v,t2,d[v][t2].dis));
}
if(t2==0&&d[v][t2+1].dis>d[t1][t2].dis+cost/2){ //分别记录每一段是半价的价格
d[v][t2+1].dis=d[t1][t2].dis+cost/2;
q.push(qnode(v,t2+1,d[v][t2+1].dis));
}
}
}
} int main(){
while(scanf("%d%d", &n, &m)!=EOF){
string a,b;
map<string,int> cnt;
cnt.clear();
ll c;
tot = 1;
int k=1;
memset(head, -1, sizeof(head));
while(m --){
cin>>a>>b>>c;
if(!cnt[a])cnt[a]=k++;
if(!cnt[b])cnt[b]=k++;
addedge(cnt[a], cnt[b], c);
}
cin>>a>>b;
if(!cnt[a])cnt[a]=k++;
if(!cnt[b])cnt[b]=k++;
if(m==0) {
printf("-1\n");
continue;
}
dijkstra(cnt[a]);
ll ans=min(d[cnt[b]][0].dis,d[cnt[b]][1].dis);
if(ans==INF) printf("-1\n");
else printf("%lld\n",ans);
}
return 0;
}
HDU-3499Flight (分层图dijkstra)的更多相关文章
- [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] ...
- bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级——分层图+dijkstra
Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i ...
- bzoj1922 [SDOI2010]大陆争霸 分层图
问题描述 幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举 ...
- hdu 3499 flight 【分层图】+【Dijkstra】
<题目链接> 题目大意: 现在给你一些点,这些点之间存在一些有向边,每条边都有对应的边权,有一次机会能够使某条边的边权变为原来的1/2,求从起点到终点的最短距离. 解题分析: 分层图最短路 ...
- Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
2834: 回家的路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 62 Solved: 38[Submit][Status][Discuss] D ...
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Sta ...
- Bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 dijkstra,堆,分层图
1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1573 Solv ...
- HDU 5669 Road(线段树建树)(分层图最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5669 [分析]线段树建树+分层图最短路 #include <cstdio> #includ ...
随机推荐
- SpringBoot对静态资源的映射规则
在WebMvcAutoConfiguration类中有相对应的方法addResourceHandlers public void addResourceHandlers(ResourceHandler ...
- ubuntu 上搭建 go的开发环境 vscode
原文链接: https://astaxie.gitbooks.io/build-web-application-with-golang/zh/01.4.html 原本我是在windows下进行go的环 ...
- linux系统Vsftpd搭建FTP
安装vsftp 使用yum命令安装vsftp #yum install vsftpd -y 添加ftp帐号和目录 先检查下nologin的位置,通常在/usr/sbin/nologin下 (*no ...
- BDC应用
第一步:SHDB或者是SM35进入BDC录制事务.开始录制. 第二部:保存录制的记录. 第三步:在你自己的程序中定义一个内表如:ITAB TYPE TABLE OF BDCDATA. 再定义一个工作空 ...
- java 利用异或^进行加密
package com.zcj.eg001; import java.nio.charset.Charset; import org.junit.Test; public class Encrypti ...
- 如何将python中pip源设置为国内源
1.Windows Python的学习过程中,往往会学习到很多库,而安装各类库的时候,往往不尽人意,下载速度从几KB到十几KB.甚至下载到一半还超时报错.这都是因为pip源是访问国外的官方源,如果需要 ...
- 关掉IE提示“当前安全设置会使计算机有风险”
我们先来看一下IE浏览器出现的提示窗口,该窗口位于最顶端,不点击设置的话,无法进行下一步的操作. 这时我们点击开始按钮 ,在弹出菜单中选择"运行"菜单项. 在打开的Windows运 ...
- vue的nuxt框架中使用vue-video-player
一.基本需求:使用nuxt框架,需要在移动端网页中播放视频. 二.文中解决的基本问题: 1.vue-video-player在nuxt中怎么使用. 2.由于为了适配移动端,使用了 ...
- hadoop及NameNode和SecondaryNameNode工作机制
hadoop及NameNode和SecondaryNameNode工作机制 1.hadoop组成 Common MapReduce Yarn HDFS (1)HDFS namenode:存放目录,最重 ...
- HADOOP 之坑
hadoop 标签: ubuntu hdfs API 概述 通过API访问hdfs文件系统,出现错误:WARN util.Shell:Did not find winutils.exe:{} HADO ...