[2A.似巨龙高歌]
容易发现,如果把 aia_iai 从小到大排序,那么 ai−ai+1≤0a_i-a_{i+1}\leq 0ai−ai+1≤0,否则一定有一项 >0>0>0 ,因此我们从小到大排序,求相邻两项差的最大值即可。
[2B.陌路寻诗礼]
subtask 1\text{subtask 1}subtask 1
考虑假如我们知道那些边在最短路上,那贪心地让这些边的边权尽可能小,其余的边边权尽可能大即可,因此每条边只有两种取值 1/k1/k1/k ,我们 2m2^m2m 枚举每条边的选择然后验证即可。
复杂度 O(T2m(n+m))O(T2^m(n+m))O(T2m(n+m)) 。
subtask 2\text{subtask 2}subtask 2
k=1k=1k=1 时,每条边取值唯一,可以用 bfsbfsbfs 求出 111 号点到每个点的最短路以及路径个数。
复杂度 O(n+m)O(n+m)O(n+m) 。
subtask 3\text{subtask 3}subtask 3
m−1m-1m−1 时,因为 111 号点可以到达每个点,所以这是一棵以 111 为根的外向树。
那么到每个点的路径唯一,随便赋值都行。
subtask 4\text{subtask 4}subtask 4
当 k=109k=10^9k=109 时,最短路一定不会走这些边,我们相当于可以删一些边。
那么找出一棵以 111 为根的外向树,树上的边赋值为 111,剩下的赋值为 10910^9109 即可。
subtask 5\text{subtask 5}subtask 5
考虑一棵以 111 为根的最短路径树,树边赋值为 111,非树边赋值为 kkk ,那么到每个点的最短路就是树上的深度,记为 depxdep_xdepx 。
对于一条非树边 (ui,vi)(u_i,v_i)(ui,vi),我们要求 depvi<depui+kdep_{v_i}< dep_{u_i}+kdepvi<depui+k,否则这条边就在最短路上。
我们找出一棵 bfsbfsbfs 树,那么有性质:
- 对于非树边 (ui,vi)(u_i,v_i)(ui,vi) ,depvi≤depui+1dep_{v_i}\leq dep_{u_i}+1depvi≤depui+1 ,否则不满足 bfsbfsbfs 的性质 。
因此,当 k>1k>1k>1 时,这棵 bfsbfsbfs 树自然就满足 depvi<depui+kdep_{v_i}<dep_{u_i}+kdepvi<depui+k ,符合要求。
否则,k=1k=1k=1,方案唯一,我们只需要验证就行了。
复杂度 O(n+m)O(n+m)O(n+m) 。
[2C/1A] 水影若深蓝
考虑把给出的 ui,viu_i,v_iui,vi 连边,形成一个图。
如果 nnn 个点都是连通的,那一定无解,因为树是一个二分图,黑白染色后 ui,viu_i,v_iui,vi 一定颜色相同,故不可能所有点颜色相同。
否则,至少有两个连通块,我们任选一个连通块,选择其内的任意一点 xxx,再从其他连通块任选一个点 yyy,然后构造一棵这样的树:
-
xxx 与 yyy 连边
-
xxx 所在连通块的其他点与 yyy 连边
-
剩下点和 xxx 连边
容易验证符合要求。
[2D/1B] 半彩三重奏
可以发现,对于给出的颜色 xi,yix_i,y_ixi,yi ,若树上不存在一条边 iii 满足 iii 两端点的颜色分别是 xi,yix_i,y_ixi,yi ,那么