1 solutions
-
0
C
算法 1
显然是断掉一些边,剩下的都是链,也就是树。答案是断掉的边数最大值。
枚举断哪些边,判一下连通性,时间复杂度 ,期望得分 。
算法 2
可以发现一定有一条边可以删,而且你随便删一条边之后剩下的点对的连通方式就固定了,相当于要求那一段的边都不能删。暴力求出还剩下哪些边可以删即可。所以做法就是枚举断哪条边,然后差分什么的暴力算一下,时间复杂度 ,期望得分 。
讨论一下可能可以过特殊性质,
我也没咋想。算法 3
可以发现如果按顺序枚举删哪条边,那每个点对 覆盖的那些边会恰好修改 次。一开始覆盖 之间的边,当枚举到 时会覆盖 和 的边,当枚举到 时会覆盖 的边。所以考虑使用线段树维护每条边的覆盖次数,相当于要做区间加,问全局有多少个 。直接线段树维护最小值和最小值个数即可。时间复杂度 ,期望得分据实现优秀程度 。
算法 4
上面那个做法很难支持修改。
我们直接换个做法。考虑一个 对删边的限制是什么:对于两条边 ,如果它们在 的同侧(即满足 同时满足或同时不满足),则可以同时删或者同时不删;如果在异侧,则不能同时删。
这启发我们给每条边一个 01 串: 表示边 在区间 里侧还是外侧。可以发现当且仅当 时才能同时删边 (否则表示对于某一个点对 ,两条边在异侧)。所以答案相当于 的桶的最大值(最多多少个 两两相等)。直接维护大概可以做到 ,
但是忘了给分了。注意我们相当于要维护一个下标为 的 map。考虑 xor hash 来把字符串转化成一个整数。对每个点对 随机一个 的变量 ,然后记一条边的权值 ,也就是所有 的 的异或和。这个相当于每个 把区间内异或上随机变量。转化成整数之后再 map。错误率我也不会分析,应该非常低。
这个说人话就是使用 xor hash 之后 的修改量是 的(只修改一位 )。
这个也非常容易维护待修。因为修改量是 的,相当于哈希值改变的只有 个元素,稍微写点讨论就好了。时间复杂度 ,期望得分据实现优秀程度 。写不到 的话常数堪忧啊。
- 1
Information
- ID
- 2823
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- (None)
- # Submissions
- 1
- Accepted
- 0
- Uploaded By