【题解】LOJ2350:「JOI 2018 Final」月票购买
原题传送门
可以很套路地得到一个结论,答案与月票的路径有一段连续的重复路径
以 s , t , u , v s,t,u,v s,t,u,v为起点跑四次最短路
现在我们枚举两个月票最短路上的点 x , y x,y x,y
a n s = m i n ( a n s , d i s u [ x ] + d i s v [ y ] , d i s u [ y ] + d i s v [ x ] ) ans=min(ans,dis_u[x]+dis_v[y],dis_u[y]+dis_v[x]) ans=min(ans,disu[x]+disv[y],disu[y]+disv[x])
对于一个 x x x, d i s u [ x ] , d i s v [ x ] dis_u[x],dis_v[x] disu[x],disv[x]是确定的,可以dp出 d i s u [ y ] , d i s v [ y ] dis_u[y],dis_v[y] disu[y],disv[y]
令 f x f_x fx表示从 x x x到 v v v的最短路
g x g_x gx表示从 x x x到 u u u的最短路
遍历最短路上的点 y y y
f x = m i n ( f x , f y ) , g x = m i n ( g x , g y ) f_x=min(f_x,f_y),g_x=min(g_x,g_y) fx=min(fx,fy),gx=min(gx,gy)
Code:
#include <bits/stdc++.h>
#define maxn 200010
#define LL long long
using namespace std;
const LL inf = 1e15;
struct heap{int node;LL len;bool operator < (const heap &x) const{return x.len < len;}
};
priority_queue <heap> q;
struct Edge{int to, next, len;
}edge[maxn << 1];
int num, head[maxn], vis[maxn], n, m, S, T, U, V;
LL dU[maxn], dV[maxn], dS[maxn], dT[maxn], f[maxn], g[maxn], ans;inline int read(){int s = 0, w = 1;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);return s * w;
}void addedge(int x, int y, int z){edge[++num] = (Edge){y, head[x], z}, head[x] = num;
}void dijk(int st, LL *dis){for (int i = 1; i <= n; ++i)vis[i] = 0, dis[i] = inf;dis[st] = 0;q.push((heap){st, 0});while (!q.empty()){int u = q.top().node; q.pop();if (vis[u]) continue;vis[u] = 1;for (int i = head[u]; i; i = edge[i].next){int v = edge[i].to;if (dis[v] > dis[u] + edge[i].len){dis[v] = dis[u] + edge[i].len;if (!vis[v]) q.push((heap){v, dis[v]});}}}
}void dfs(int u){if (vis[u]) return;vis[u] = 1;f[u] = dV[u], g[u] = dU[u];for (int i = head[u]; i; i = edge[i].next){int v = edge[i].to;if (dS[u] + dT[v] + edge[i].len > dS[T]) continue;dfs(v);f[u] = min(f[u], f[v]), g[u] = min(g[u], g[v]);}ans = min(ans, min(f[u] + dU[u], g[u] + dV[u]));
}int main(){n = read(), m = read();S = read(), T = read(), U = read(), V = read();for (int i = 1; i <= m; ++i){int x = read(), y = read(), z = read();addedge(x, y, z), addedge(y, x, z);}dijk(S, dS), dijk(T, dT), dijk(U, dU), dijk(V, dV);ans = dU[V];
// printf("%lld\n", ans);for (int i = 1; i <= n; ++i) vis[i] = 0;dfs(S);printf("%lld\n", ans);return 0;
}
【题解】LOJ2350:「JOI 2018 Final」月票购买相关推荐
- 【2018.10.1】「JOI 2014 Final」年轮蛋糕
题面 一看到求"最小值的最大值"这种问题,就能想到二分了. 二分答案,然后我们要把一圈分成三块,使这三块的大小都$\geq mid$.做法是把环展开成2倍长度的链,先钦定一个起点, ...
- 【题解】LOJ3254:「JOI 2020 Final」集邮比赛 3
原题传送门 发现 n < = 200 n<=200 n<=200,那么我们就可以想一个 O ( n 3 ) O(n^3) O(n3)的dp 发现每次肯定是向左/右推进 可以令 d p ...
- 「JOI 2016 Final」断层
嘟嘟嘟 今天我们模拟考这题,出的是T3.实在是没想出来,就搞了个20分暴力(还WA了几发). 这题关键在于逆向思维,就是考虑最后的\(n\)的个点刚开始在哪儿,这样就减少了很多需要维护的东西. 这就让 ...
- Luogu P5103 「JOI 2016 Final」断层 树状数组or线段树+脑子
太神仙了这题... 原来的地面上升,可以倒着操作(时光倒流),转化为地面沉降,最后的答案就是每个点的深度. 下面的1,2操作均定义为向下沉降(与原题意的变换相反): 首先这个题目只会操作前缀和后缀,并 ...
- T3:LOJ2332「JOI 2017 Final」焚风现象.cpp
记录差值 然后每次运算一下头和尾 如果尾端是最后一次增加则不用运算尾端 详见代码 #include<iostream> #include<cstdio> #include< ...
- Libre OJ P2332「JOI 2017 Final」焚风现象【差分思想】By cellur925
题目传送门 这道题开始看起来会很晕...\(qwq\).首先我们要明确题目中的海拔&&温度.温度是受海拔影响的,每次改变的是海拔,我们求的是温度. 我们开始读入的时候便可以处理出开始\ ...
- 「SCOI 2018 D2T1」Pipi 酱的日常
传送门 problem 给定 nnn 个数,第 i(1≤i≤n)i(1\le i\le n)i(1≤i≤n) 个位置上的值为 xix_ixi,有 mmm 个操作,操作有以下两种: 1 pos v:将 ...
- 「CSP-S模拟赛」2019第四场
「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...
- 「JOISC 2018 Day 3」比太郎的聚会
「JOISC 2018 Day 3」比太郎的聚会 题意: 给你一个\(DAG\),若干组询问,每次给出一个终点和若干个点,问从给出点以外的点出发,到达终点的最长路.(\(|V|\leq 1e5 | ...
最新文章
- Selenium3自动化测试——15.调用Javascript进行滚动条控制
- VSCode + Latex 配置
- 让ABAP开发者更加轻松的若干快捷键
- How to handle the generic error Cannot read property md of undefined
- Java如何定义三个圆_java – 以编程方式查找三个圆的交叉点
- Struts2 OGNL
- 32利用文件系统保存数据_网易技术实践|Docker文件系统实战
- 【JQGRID DOCUMENTATION】.学习笔记.5.Form Editing
- 需要写的一些pycoe
- MySQL的Limit子句
- 【clickhouse】ClickHouseException code: 225 ZooKeeper session has been expired
- ssm如何支持热部署_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境
- 字符串,列表,元组,字典基本函数
- Linux系统重要快捷键 Shell 常用通配符
- 语义分析的方法简述之文本基本处理
- 特教学校计算机课,特教学校引入编程课 为听障孩子打开智能之门
- python导出pdf文件怎么只有一页_python利用PyPDF2拆分pdf文件成单页
- 2010 年全国大学生数学建模竞赛甘肃赛区 获奖情况
- springboot配置文件密文解密
- 腾讯云docker部署halo个人博客及myql数据库笔记