hdu3499---玄学的分层图
枚举固然可以,但是我还是想看看分层图。。。。

如本题所述 ,从上图到下图就是一个折扣的过程,上部分只有一种办法下去,下部分图没有办法去上面,该模型十分的巧妙啊!!!
下面我来演示一下自己改的样例吧

紫色路线是最短的,从上往下的路就是打折的路,类似bfs搜索,上面的所有点都可以下来,但是dijkstra只会只会保留最优的解
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<map>
#include<string>
using namespace std;
#define maxn 500000+10
typedef long long ll;
const long long INF = 2e14;
struct Node {
int p, tmp;
ll val;
Node(int a, ll b,int t) :p(a), val(b),tmp(t) {}
};
int n, m;
vector<Node>G[maxn];
bool operator < (const Node a, const Node b) {
if (a.val > b.val) return true;
else return false;
}
int vis[maxn][2];
ll dis[maxn][2];
void insert(int be, int en, ll len) {
G[be].push_back(Node(en, len, 0));
G[be].push_back(Node(en, len, 1));
return;
}
int dijkstra(int be) {
priority_queue<Node>que;
for (int i = 0; i <= n; i++) {
for (int j = 0; j < 2; j++) {
vis[i][j] = 0;
dis[i][j] = INF;
}
}
dis[be][0] = 0;
dis[be][1] = 0;
que.push(Node(be, 0, 0));
while (!que.empty()) {
Node ans = que.top();
que.pop();
if (vis[ans.p][ans.tmp] == 0) {
vis[ans.p][ans.tmp] = 1;
for (int i = 0; i < G[ans.p].size(); i++) {
int p = G[ans.p][i].p;
int t = G[ans.p][i].tmp;//确定位置
if (!vis[p][t] && dis[p][t] > dis[ans.p][t] + G[ans.p][i].val) {
dis[p][t] = G[ans.p][i].val + dis[ans.p][t];
que.push(Node(p, dis[p][t], t));
} if (t == 0) {//可以下来的话
if (!vis[p][1] && dis[p][1] > dis[ans.p][0] + G[ans.p][i].val / 2) {//从上面穿下来所以是0加给1
dis[p][1] = dis[ans.p][0] + G[ans.p][i].val/2;
que.push(Node(p, dis[p][1], 1));
}
}
}
}
}
return 0;
}
map<string, int>ins;
int main() {
while (~scanf("%d %d", &n, &m)) {
ins.clear();
for (int i = 0; i <= n; i++)G[i].clear();
string be, en;
ll len;
int cnt = 1;
while (m--) {
cin >> be >> en;
scanf("%lld", &len);
if (ins[be] == 0) ins[be] = cnt++;
if (ins[en] == 0) ins[en] = cnt++;
insert(ins[be], ins[en], len);
}
cin >> be >> en;
if (ins[be] == 0) ins[be] = cnt++;
if (ins[en] == 0) ins[en] = cnt++;
dijkstra(ins[be]);
if (dis[ins[en]][1] == INF) printf("-1\n");
else printf("%lld\n", dis[ins[en]][1]);
}
return 0;
}
hdu3499---玄学的分层图的更多相关文章
- 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa
3627: [JLOI2014]路径规划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 186 Solved: 70[Submit][Status] ...
- ACdream 1017 [分层图][网络流]
/* 大连热身C题 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一个城市路线图,给定起点给定终点.有n个货物从起点运送到终点.城市的边是无向边. 每个货物每天如果通过某条路,那么这天这条路只能运 ...
- poj3635Full Tank?[分层图最短路]
Full Tank? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7248 Accepted: 2338 Descri ...
- HDU 5669 线段树优化建图+分层图最短路
用线段树维护建图,即把用线段树把每个区间都标号了,Tree1中子节点有到达父节点的单向边,Tree2中父节点有到达子节点的单向边. 每次将源插入Tree1,汇插入Tree2,中间用临时节点相连.那么T ...
- BZOJ 2763 分层图最短路
突然发现我不会分层图最短路,写一发. 就是同层中用双向边相连,用单向边连下一层 #include <cstdio> #include <algorithm> #include ...
- ZOJ-2364 Data Transmission 分层图阻塞流 Dinic+贪心预流
题意:给定一个分层图,即只能够在相邻层次之间流动,给定了各个顶点的层次.要求输出一个阻塞流. 分析:该题直接Dinic求最大流TLE了,网上说采用Isap也TLE,而最大流中的最高标号预流推进(HLP ...
- 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)
[题意] 问题描述:给定一个 N*N 的方形网格,设其左上角为起点◎, 坐标为( 1, 1), X 轴向右为正, Y轴向下为正, 每个方格边长为 1, 如图所示. 一辆汽车从起点◎出发驶向右下角终点▲ ...
- 【网络流24题】 No.14 孤岛营救问题 (分层图最短路)
[题意] 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛, 营救被敌军俘虏的大兵瑞恩. 瑞恩被关押在一个迷宫里, 迷宫地形复杂, 但幸好麦克得到了迷宫的地形图. 迷宫的外形是 ...
- 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 ...
随机推荐
- du,df区别
1.记住命令 du:disk Usage -h, --human-readable print sizes in human readable format df:disk free 2.区别 du ...
- 微信服务号获得openid 跟用户信息
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxx&redirect_uri=http://www. ...
- QT开发ROS遇到问题:execute_process(/usr/bin/python"/home/fu/catkin_ws/build/catkin_genetated/generate_cached_setup.py)..........
具体如上图显示,网上给的方法是重装ros和重新创建ROS工作空间.经过这样做以后发现问题依然存在. 最后考虑可能是没有加载ROS的环境变量.(我的qtcreator中已经有了创建ros工程的项目,但是 ...
- HDFS命令行界面
- android学习——android项目的的目录结构
然后我们看一下Helloword的程序目录: 我们可以看到 大致有的文件: 1. MainHelloWorld.java文件 2. R.java文件 3. android.jar文件 4. RE ...
- 一文告诉你Adam、AdamW、Amsgrad区别和联系 重点
**序言:**Adam自2014年出现之后,一直是受人追捧的参数训练神器,但最近越来越多的文章指出:Adam存在很多问题,效果甚至没有简单的SGD + Momentum好.因此,出现了很多改进的版本, ...
- 54个提高PHP程序运行效率的方法
1.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_ge ...
- 关于XIFF开发IM的一些想法
因为发现网上XIFF的资料真的不多,何况现在gg又被和谐,查询资料很是不便.我写这篇文章的目的除了跟大家分享一些开发心得,也希望有类似经验的朋友看到文章后有机会多多交流. 之前我没有怎么接触过flas ...
- vbox ubuntu虚拟机中加载笔记本内置摄像头
使用C:\Program Files\Oracle\VirtualBox\VBoxManage.exe工具加载摄像头 1,显示可用摄像头 C:\Program Files\Oracle\Virtual ...
- 【原生JS】评论编辑器 文本操作
效果图: HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...