2024.9.27
First Post:
Last Update:
Word Count:
Read Time:
Last Update:
Word Count:
525
Read Time:
1 min
一直在搭博客没怎么做题啊···
Tourism *2200
首先手玩样例可以发现:环上的点可以都拿,连接环的点也可以都拿。
然后考虑剩下的点。
因为剩下的点只能选一条点权和最大的路径,所以考虑拓扑 dp。
那么答案就是起点到环经过的点 + 环上的点的点权和 +
学到的东西:看到这种类似不能重复走一条边的东西可以考虑缩点双(因为割边走过去不能回来)
Happy Line *2200
感觉很困难。我是性质低手/kk。
假设当前 需要操作,那么操作完后会变成 。
对于 ,可以发现 。
即 。
不难推出,对于所有 ,都有 为定值。
那么将 排序得到序列 ,答案就是 。
无解就是存在 。
学到的东西:对于这种交换位置的题,要往排序想,分析两个元素交换带来的影响(类似微扰法)。
Short Code *2200
读完题瞬间想到一个假做法:按长度从小到大排序,然后模拟。
但这很容易 hack。对于一个很长的串,我们完全可以让它取很短的一部分,让一些短串取稍微长一些。这样比长串取很长短串取很短要优。
那从大到小呢?也不行。
因为很有可能长串取完以后,一些短串作为长串的前缀,就算全取也无法避免重复,这就不合法了。
然后不会了。
正解:
建立 trie 树。此时问题变为:
给一棵树,有一些黑点。可以把黑点移到祖先处,但两个黑点不能在同一个位置。求最小的黑点深度和。
用堆维护每颗子树中黑点的深度,如果根上没有黑点就把最深的移到根。
学到的东西:看到字符串前缀想到 trie(还是字符串做少了)。