题目链接


题目大意:

两点间最短路的定义变成:所有的边之和−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(分层图最短路 用分层图对边权操作进行选择)相关推荐

  1. codeforces1473 E.Minimum Path(分层图最短路)

    E - Minimum Path 分层图最短路 第一个分层图 第0层就是按照题中给的点连边,从第0层到第1层我们连一条边权是0的边,从第1层到第2层连一条边权是原先边权2倍的边,当然第1层以及第2层之 ...

  2. 图论之分层图最短路总结 与经典例题

    一.分层图 分层图只是建图时有区别,但跑最短路板子都是一样的,正所谓图论最难的就是建图,只要有合适的建图方法,那么问题就很简单了. 分层图是指有很多个平行的图,各个平行的图之间有特殊的连接边. 如何更 ...

  3. CF1473E Minimum Path(拆点+最短路)

    CF1473E Minimum Path description solution code description 题目链接 solution 看到 ∑i=1kwei\sum_{i=1}^kw_{e ...

  4. BZOJ2662[BeiJing wc2012]冻结——分层图最短路

    题目描述 "我要成为魔法少女!"      "那么,以灵魂为代价,你希望得到什么?"  "我要将有关魔法和奇迹的一切,封印于卡片之中„„"  ...

  5. 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...

  6. 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)

    题目链接:点击查看 题目大意:给出一张图,每条边都有权值,现在要求从点st到达点ed,沿途中可以让k条边的边权免费,现在求最短路 题目分析:分层图经典模板问题,直接套板子就行了,最后记得对于数组d的每 ...

  7. POJ - 3662 Telephone Lines(分层图最短路)

    题目链接:点击查看 题目大意:在郊区有N座通信基站,P条双向电缆,第i条电缆连接基站Ai和Bi.特别的,1号基站是通信公司的总站,N号基站位于一座农场中.现在,农场主希望对通信线路进行升级,其中升级第 ...

  8. 【bzoj2834】回家的路 分层图最短路

    题目描述 输入 输出 样例输入 2 1 1 2 1 1 2 2 样例输出 5 题解 分层图最短路 dis[i][0]表示到i为横向时起点到i的最短路,dis[i][1]表示到i为纵向时起点到i的最短路 ...

  9. 【算法练习】CodeVs1391 伊吹萃香(分层图最短路)

    题意 在幻想乡,伊吹萃香是能够控制物体密度的鬼王.因为能够控制密度,所以萃香能够制造白洞和黑洞,并可以随时改变它们.某一天萃香闲着无聊,在妖怪之山上设置了一些白洞或黑洞,由于引力的影响,给妖怪们带来了 ...

最新文章

  1. 为什么在C#中捕获并抛出异常?
  2. [YTU]_2535( C++复数运算符重载(+与))
  3. 基于python的nlp预备知识
  4. javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)...
  5. 乐鑫官宣:ESP32-S3真的来了!
  6. Axure tabstrip and different control
  7. 2021年本溪高考成绩查询,2021年本溪高考状元名单公布 今年本溪高考状元是谁资料和分数...
  8. element-ui如何进行调试
  9. Python_模块Module
  10. DTMF采用RFC2833进行带内传输的实现[ZT]
  11. cat testEOF,more
  12. 百旺智能编码_“智能编码”助手助您规范使用税收分类编码
  13. ArcGIS 10.4 Desktop安装步骤。
  14. 6大常见家谱样本,尤其第4个,深受各大名门望族的喜爱!
  15. spring boot儿童教育管理系统毕业设计源码281442
  16. 计算机组成acc什么意思,计算机组成作业老师给的答案[沐风教育]
  17. 监控相机IQ调试策略
  18. python 英语翻译_python中英文翻译
  19. 2.6 人工智能组件
  20. LCA(包含RMQ)

热门文章

  1. E1载波的数据速率是(16)Mb/s,E3载波的数据速率是(17)Mb/s。答案】B D
  2. Js 向json对象中添加新元素
  3. arm汇编学习(二)
  4. HDU 2660 Accepted Necklace
  5. 2010年7月blog汇总:OpenTest、MetaModelEngine和敏捷个人
  6. c++经典代码大全_宁海檩条C型钢型号大全
  7. 这个Python知识点,90%初学者没太整明白
  8. Python基础编程——多重继承下方法的调用
  9. 一篇文章教会你利用Python网络爬虫获取Mikan动漫资源
  10. java拍照搜题软件下载_拍照即可秒出答案,搜题类App:是教辅“神器”还是偷懒“神器”?...