*Hello 2025

A

显然只有 0 所在的那一行或者那一列会有贡献,且 1 只会在这两个里面出现一次
所以答案就是 \(\max(n,m)+1\)

B

显然 \(f(a)\) 是颜色数
于是按照出现次数从小到大改即可

C

一开始写了一个数位 DP,T 了
仔细想了一下,实际上是要让出现不同的数位之和最大,也就是说 \(c\) 只要不重复就可以随便取,只需考虑 \(a,b\)
相同的前缀肯定动不了,找到第一个不同的位,然后让 \(a\) 为 0,\(b\) 为 1,后面让 \(a\) 为 1,\(b\) 为 0 即可

D

卡了好久/ll
首先只需要考虑区间两端的数是最值的情况
其实不用这么严格,如果两端不是最值的话一定可以向中间移动,不会变劣
所以只需计算 \(\max(a_r-a_l-r+l,a_l-a_r-r+l)\),容易使用线段树维护

E1

考虑枚举答案,将小于 \(val\) 的边权看作 0,否则看作 1,那么只要 \(dis(u,v)<k\) 就说明 \(ans<val\)
一开始先跑一次 floyd,然后按照边权从小到大枚举,每次使用当前边去松弛即可
时间复杂度 \(O(n^3+mn^2+mq)\)

E2

发现如果不是 MST 上的边,那么松弛到它的时候两端已经出现长度为零的路径了,所以不需要松弛
所以只需松弛 MST 上的边
时间复杂度 \(O(n^3+nq)\)

posted @ 2025-01-05 16:53  ax_by_c  阅读(102)  评论(0)    收藏  举报