图论 ---- E. Minimum Path(分层图最短路 用分层图对边权操作进行选择)
题目链接
题目大意:
两点间最短路的定义变成:所有的边之和−max+min所有的边之和-max+min所有的边之和−max+min
解题思路:
这里很明显就是变成了最短路的时时候就是把路径上边权最小值乘2,然后把最大值去掉?
相当于免费?
是不是很像分层图?
就是你有两次机会:1.你可以把一条路径上的边权变成0。2.是把边权翻倍
为什么跑分层图最短路就是答案呢?
因为根据最短路的性质肯定是去大边,翻倍小边
我们一共有4种状态:
1.两个机会都没用
2.用了第一个条件,第二个没用
3.用了第二个条件,第一个没用
4.两个都用了
那么直接4个状态这样是不是就可以了呢?
肯定是不行的
因为可能两点间的最短路只有一条边??
那么你这个分层图要到4至少要两条边??
那么怎么办?
第一层和第4层再连一条边
AC code
#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 200010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x) {x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args) {read(first);read(args...);
}
struct node {int nxt, to, val;
}edge[maxn*20];
int head[maxn<<2], cnt;
int n, m;
inline void add(int from, int to, int val) {edge[cnt] = {head[from],to,val};head[from] = cnt ++;
}
priority_queue<PII, vector<PII>, greater<PII> > q;
ll dist[maxn<<2];
bool vis[maxn<<2];
inline void dij() {ms(dist,LLF);dist[1] = 0;q.push({0,1});while(!q.empty()) {auto top = q.top();q.pop();if(vis[top.second]) continue;vis[top.second] = 1;for(int i = head[top.second]; ~i; i = edge[i].nxt) {int to = edge[i].to;if(dist[to] > dist[top.second] + edge[i].val) {dist[to] = dist[top.second] + edge[i].val;q.push({dist[to],to});}}}
}int main() {IOS;ms(head,-1);cin >> n >> m;for(int i = 1; i <= m; ++ i) {int u, v, w;cin >> u >> v >> w;for(int j = 0; j <= 3; j ++) add(u+j*n,v+j*n,w),add(v+j*n,u+j*n,w);add(u,v+3*n,w);add(v,u+3*n,w);add(u,v+n,2*w);add(v,u+n,2*w);add(u,v+2*n,0);add(v,u+2*n,0);add(u+n,v+3*n,0);add(v+n,u+3*n,0);add(u+2*n,v+3*n,2*w);add(v+2*n,u+3*n,2*w);}dij();for(int i = 2; i <= n; ++ i) cout << dist[i+3*n] << " ";
}
图论 ---- E. Minimum Path(分层图最短路 用分层图对边权操作进行选择)相关推荐
- codeforces1473 E.Minimum Path(分层图最短路)
E - Minimum Path 分层图最短路 第一个分层图 第0层就是按照题中给的点连边,从第0层到第1层我们连一条边权是0的边,从第1层到第2层连一条边权是原先边权2倍的边,当然第1层以及第2层之 ...
- 图论之分层图最短路总结 与经典例题
一.分层图 分层图只是建图时有区别,但跑最短路板子都是一样的,正所谓图论最难的就是建图,只要有合适的建图方法,那么问题就很简单了. 分层图是指有很多个平行的图,各个平行的图之间有特殊的连接边. 如何更 ...
- CF1473E Minimum Path(拆点+最短路)
CF1473E Minimum Path description solution code description 题目链接 solution 看到 ∑i=1kwei\sum_{i=1}^kw_{e ...
- BZOJ2662[BeiJing wc2012]冻结——分层图最短路
题目描述 "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" "我要将有关魔法和奇迹的一切,封印于卡片之中„„" ...
- 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)
题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...
- 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)
题目链接:点击查看 题目大意:给出一张图,每条边都有权值,现在要求从点st到达点ed,沿途中可以让k条边的边权免费,现在求最短路 题目分析:分层图经典模板问题,直接套板子就行了,最后记得对于数组d的每 ...
- POJ - 3662 Telephone Lines(分层图最短路)
题目链接:点击查看 题目大意:在郊区有N座通信基站,P条双向电缆,第i条电缆连接基站Ai和Bi.特别的,1号基站是通信公司的总站,N号基站位于一座农场中.现在,农场主希望对通信线路进行升级,其中升级第 ...
- 【bzoj2834】回家的路 分层图最短路
题目描述 输入 输出 样例输入 2 1 1 2 1 1 2 2 样例输出 5 题解 分层图最短路 dis[i][0]表示到i为横向时起点到i的最短路,dis[i][1]表示到i为纵向时起点到i的最短路 ...
- 【算法练习】CodeVs1391 伊吹萃香(分层图最短路)
题意 在幻想乡,伊吹萃香是能够控制物体密度的鬼王.因为能够控制密度,所以萃香能够制造白洞和黑洞,并可以随时改变它们.某一天萃香闲着无聊,在妖怪之山上设置了一些白洞或黑洞,由于引力的影响,给妖怪们带来了 ...
最新文章
- 为什么在C#中捕获并抛出异常?
- [YTU]_2535( C++复数运算符重载(+与))
- 基于python的nlp预备知识
- javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)...
- 乐鑫官宣:ESP32-S3真的来了!
- Axure tabstrip and different control
- 2021年本溪高考成绩查询,2021年本溪高考状元名单公布 今年本溪高考状元是谁资料和分数...
- element-ui如何进行调试
- Python_模块Module
- DTMF采用RFC2833进行带内传输的实现[ZT]
- cat testEOF,more
- 百旺智能编码_“智能编码”助手助您规范使用税收分类编码
- ArcGIS 10.4 Desktop安装步骤。
- 6大常见家谱样本,尤其第4个,深受各大名门望族的喜爱!
- spring boot儿童教育管理系统毕业设计源码281442
- 计算机组成acc什么意思,计算机组成作业老师给的答案[沐风教育]
- 监控相机IQ调试策略
- python 英语翻译_python中英文翻译
- 2.6 人工智能组件
- LCA(包含RMQ)
热门文章
- E1载波的数据速率是(16)Mb/s,E3载波的数据速率是(17)Mb/s。答案】B D
- Js 向json对象中添加新元素
- arm汇编学习(二)
- HDU 2660 Accepted Necklace
- 2010年7月blog汇总:OpenTest、MetaModelEngine和敏捷个人
- c++经典代码大全_宁海檩条C型钢型号大全
- 这个Python知识点,90%初学者没太整明白
- Python基础编程——多重继承下方法的调用
- 一篇文章教会你利用Python网络爬虫获取Mikan动漫资源
- java拍照搜题软件下载_拍照即可秒出答案,搜题类App:是教辅“神器”还是偷懒“神器”?...