CF题解
G. Omg Graph
https://codeforces.com/contest/2117/problem/G
给定无向带权连通图,定义一条路径的花费为:路径经过的边中,边权最大值 + 最小值。求从 \(1\) 到 \(n\) 路径中的最小花费(注意不一定是简单路径)。
\(2≤n≤2⋅10^5,n−1≤m≤\min(2⋅10^5,n(n−1)/2),1≤u,v≤n,1≤w≤10^9\)
点击查看题解
由于最小生成树是最小瓶颈树,所以需要求图的最小生成树。
设 \(1\rightarrow i\) 的瓶颈为 \(\text{dmax}_i\),则边 \(j\) 的瓶颈为 \(\text{emax}_j=\max\{w_j,\min\{\text{dmax}_i\mid (i,j)\in E\}\}\)。则答案为: \[ \min\{w_i+\max\{\text{dmax}_n,\text{emax}_j\}\mid 1\le i\le m\} \]
1 |
|
D. From 1 to Infinity
https://codeforces.com/contest/2132/problem/D
写下一个无限长的数字:\(1234567891011121314151617...\),求从最高位开始前 \(k\) 位数码的和。
多组数据,\(1≤t≤2⋅10^4,1≤k≤10^{15}\)。
点击查看题解
先把不完整的尾巴算出来,之后考虑算 \(1\sim x\) 的数位和。
使用递归解决问题。例如算的是 \(1\sim546\),可以先算出 \(1\sim499\),之后再加上 \((46+1)\) 个 \(5\),最后算 \(1\sim46\) 递归解决即可。
1 |
|
D. Not Alone
https://codeforces.com/contest/2153/problem/D
如果环形数列中每个数存在至少一个与之相等的相邻数,称这个数列是好数列。
给一个长度为 \(n\) 的环形数列 \(a\)。可以进行任意次操作:对数列中任意一个数增加或减少一。求最少需要多少次操作,将 \(a\) 数列变为好数列。
\(3≤n≤2⋅10^5,1≤a_i≤10^9\)
点击查看题解
对于非环形数列,可以使用 DP 解决:设 \(f(i,2/3)\) 表示将 \(a[1:i]\) 变成好数列,且末尾连通块大小为 \(2/3\) 的最少操作。
对于题目要求环形数列,需要断环为链。考虑到连通块大小不超过 \(3\),所以只需要取断点 \(1,2,3\) 号位即可。
1 |
|