Solution -「Gym 101630J」Journey from Petersburg to Moscow
\(\mathscr{Description}\)
Link.
给定含有 \(n\) 个点 \(m\) 条边的带权无向图,一条路径的长度定义为其中前 \(k\) 大的边权和,求 \(1\) 到 \(n\) 的最短路。
\(n,m,k\le3\times10^3\)。
\(\mathscr{Solution}\)
模拟赛题,我对放 WQS 过了但其实大样例都没有凸性的造数据人表示 。
先把正常的最短路作为答案上界,接下来我们只需要考虑路径中包含至少 \(k\) 条边的情况。算是一种构造,枚举第 \(k\) 大的边权 \(w_0\),令所有边权减去 \(w_0\) 并向 \(0\) 取 \(\max\),用此时最短路的长度 \(+kw_0\) 更新答案。
理解:大于 \(0\) 的边相当于这条边会加入答案贡献,那么超过 \(k\) 条一定不优;小于 \(k\) 条虽然不合法,但是一定会被 \(w_0\) 变小的方案覆盖掉。
最终复杂度就是 \(\mathcal O(m^2\log m)\) 的。
\(\mathscr{Code}\)
/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
typedef long long LL;
typedef std::pair<LL, int> PLI;
typedef std::pair<int, int> PII;
#define fi first
#define se second
const int MAXN = 3e3, MAXM = 3000;
const LL LINF = 1ll << 60;
int n, m, K, S, T, eu[MAXM + 5], ev[MAXM + 5], ew[MAXM + 5];
std::vector<PII> adj[MAXN + 5];
LL dis[MAXN + 5];
inline void dijkstra(const int dlt) {
static std::priority_queue<PLI, std::vector<PLI>, std::greater<PLI> > heap;
rep (i, 1, n) dis[i] = LINF;
heap.push({ dis[S] = 0, S });
while (!heap.empty()) {
PLI p(heap.top()); heap.pop();
if (p.fi != dis[p.se]) continue;
for (auto& [v, w]: adj[p.se]) {
int nw = std::max(w - dlt, 0);
if (dis[v] > nw + p.fi) {
heap.push({ dis[v] = nw + p.fi, v });
}
}
}
}
int main() {
// freopen("fee.in", "r", stdin);
// freopen("fee.out", "w", stdout);
std::ios::sync_with_stdio(false), std::cin.tie(0);
std::cin >> n >> m >> K, S = 1, T = n;
rep (i, 1, m) {
std::cin >> eu[i] >> ev[i] >> ew[i];
adj[eu[i]].emplace_back(ev[i], ew[i]);
adj[ev[i]].emplace_back(eu[i], ew[i]);
}
dijkstra(0);
LL ans = dis[T];
rep (i, 1, m) {
dijkstra(ew[i]);
ans = std::min(ans, dis[T] + 1ll * ew[i] * K);
}
std::cout << ans << '\n';
return 0;
}
Solution -「Gym 101630J」Journey from Petersburg to Moscow的更多相关文章
- Solution -「Gym 102979E」Expected Distance
\(\mathcal{Description}\) Link. 用给定的 \(\{a_{n-1}\},\{c_n\}\) 生成一棵含有 \(n\) 个点的树,其中 \(u\) 连向 \([1, ...
- Solution -「Gym 102979L」 Lights On The Road
\(\mathcal{Description}\) Link. 给定序列 \(\{w_n\}\),选择 \(i\) 位置的代价为 \(w_i\),要求每个位置要不被选择,要不左右两个位置至少被 ...
- Solution -「Gym 102956F」Find the XOR
\(\mathcal{Description}\) Link. 给定 \(n\) 个点 \(m\) 条边的连通无向图 \(G\),边有边权.其中 \(u,v\) 的距离 \(d(u,v)\) ...
- Solution -「Gym 102956B」Beautiful Sequence Unraveling
\(\mathcal{Description}\) Link. 求长度为 \(n\),值域为 \([1,m]\) 的整数序列 \(\lang a_n\rang\) 的个数,满足 \(\not\ ...
- Solution -「Gym 102956F」Border Similarity Undertaking
\(\mathcal{Description}\) Link. 给定一张 \(n\times m\) 的表格,每个格子上写有一个小写字母.求其中长宽至少为 \(2\),且边界格子上字母相同的矩 ...
- Solution -「Gym 102956A」Belarusian State University
\(\mathcal{Description}\) Link. 给定两个不超过 \(2^n-1\) 次的多项式 \(A,B\),对于第 \(i\in[0,n)\) 个二进制位,定义任意一个二元 ...
- Solution -「Gym 102798I」Sean the Cuber
\(\mathcal{Description}\) Link. 给定两个可还原的二阶魔方,求从其中一个状态拧到另一个状态的最小步数. 数据组数 \(T\le2.5\times10^5\). ...
- Solution -「Gym 102798K」Tree Tweaking
\(\mathcal{Description}\) Link. 给定排列 \(\{p_n\}\),求任意重排 \(p_{l..r}\) 的元素后,将 \(\{p_n\}\) 依次插入二叉搜索树 ...
- Solution -「Gym 102798E」So Many Possibilities...
\(\mathcal{Description}\) Link. 给定非负整数序列 \(\{a_n\}\) 和 \(m\),每次随机在 \(\{a\}\) 中取一个非零的 \(a_i\)(保证存 ...
- Solution -「Gym 102759I」Query On A Tree 17
\(\mathcal{Description}\) Link. 给定一棵含 \(n\) 个结点的树,结点 \(1\) 为根,点 \(u\) 初始有点权 \(a_u=0\),维护 \(q\) 次 ...
随机推荐
- ASN.1 DER证书私钥的提取
Java生成的证书在.Net里面无法导入.原因是Java导入的整个ASN.1格式的证书..Net需要设置的只是证书的密钥(公钥.私钥).无法直接使用,因此需要提取密钥. 1.查看密钥 使用lapo.i ...
- Linux 安装idea
前置 Idea2020 Xftp6 步骤 将压缩包通过Xftp6上传到/opt/idea 解压 启动/bin目录下的./idea.sh,配置jdk 此步骤需要在虚拟机的图形界面执行 编写hello.j ...
- Cisco Packet Tracer 交换机代码
二层交换机S1代码: >en #conf t #vlan 10 #vlan 20 #int r f 0/1-5 #sw a v 10 #int r f 0/6-10 #sw a v 20 #i ...
- 【一步步开发AI运动小程序】十九、运动识别中如何解析RGBA帧图片?
引言 最近有不少开发者向我们咨询,像体测.赛事等应用场景中,需要保存运动过程的图像,如何将相机抽取的RGBA帧图像解析成.jpg或.png格式的图像?今天我们就为您介绍相应的解决方案. 一.RGBA图 ...
- vue2-vuex
专门在 Vue 中实现集中式状态(数据)管理的一个 Vue 插件,对 vue 应 用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信 应用场景: 多个组 ...
- Python模块之functools.partial
在Python编程中,functools.partial是一个强大的工具,它提供了一种部分应用函数的方式,能够在创建新函数时固定部分参数,从而在后续调用中减少需要传递的参数数量.本文将深入介绍func ...
- Java8提供的Stream方式进行分组GroupingBy
有时我们需要对集合进行分组操作,这时可以使用Java8提供的Stream方式进行分组.挺好用的,此处记录下.直接贴code: Road实体: @Data @NoArgsConstructor @A ...
- office重装后,office365弹窗去除的终极方法
Office重装后,残留的office365的弹窗让人很厌烦: 解决方法: 1. WIN+R,运行注册表编辑器:regedit 2.顶部复制以下两个路径,将左侧对应的OEM文件夹删除,即可. HKEY ...
- Flutter之GetX之路由管理
GetX之路由管理 GetX有一套完整的路由管理,并且不需要context上下文,API非常简洁 直接导航 导航到新的页面 Get.to(NextScreen()); 返回,此方法可以用于关闭Snac ...
- vba interpreter 结束
https://github.com/inshua/vba-interpreter 已覆盖几乎 VB 所有的特性,只是库还不够全. VB 语言自身较为落后,语法也有诸多设计不当.最严重的莫过于函数和数 ...