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.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举 ...
随机推荐
- Confluence 6 后台中为站点添加应用导航
Confluence 6 后台中为站点添加应用导航的连界面和方法. https://www.cwiki.us/display/CONFLUENCEWIKI/Configuring+the+Site+H ...
- Android 基础 二 四大组件 Activity
Activity Intent IntentFilter 一理论概述 一. Activity 用来提供一个能让用户操作并与之交互的界面. 1.1 启动 startActivity(Intent int ...
- LeetCode(117):填充同一层的兄弟节点 II
Medium! 题目描述: 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *n ...
- Python基础之常用模块
一.time模块 1.时间表达形式: 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: 1.1.时间戳(timestamp) :通常来说,时间 ...
- mysql 修改配置文件my.cnf失败
一.连接Mysql提示无法通过socket的解决方法连接到本地MySQL服务器 http://www.aiezu.com/db/mysql_cant_connect_through_socket.ht ...
- zoj3471 状态压缩dp基础
/* dp[S]表示状态S下的最大收益,0表示没有了,1表示还在 */ #include<bits/stdc++.h> using namespace std; <<],mp[ ...
- js中的“==”和“===”的区别
简单来说: == 代表相同, ===代表严格相同, 为啥这么说呢, 这么理解: 当进行双等号比较时候: 先检查两个操作数数据类型,如果相同, 则进行===比较, 如果不同, 则愿意为你进行一次类型转换 ...
- SSM + Android 网络文件上传下载
SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...
- 论文阅读笔记十四:Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation(CVPR2015)
论文链接:https://arxiv.org/abs/1506.04924 摘要 该文提出了基于混合标签的半监督分割网络.与当前基于区域分类的单任务的分割方法不同,Decoupled 网络将分割与分类 ...
- 开启或停止website
1.添加:Microsoft.Web.Administration 2.代码: static void Main(string[] args) { var server = new ServerMan ...