Luogu5659 树上的数
https://www.luogu.com.cn/problem/P5659
A:震惊!举世闻名的毒瘤题!是不是用到一堆毒瘤算法?
B:深搜、链表。
A:???
一道大力分类讨论好题。
考虑贪心的思路,我们从小到大移动数字,每次贪心地把当前枚举到的点移动到可以移动到的最小位置,这样得到的答案必然正确。
本题的难点在于如何判断一个点是否能够移动到另一个点。
我们考虑与一个点\(u\)相连的一些边之间可能存在偏序关系。
也就是说,一条边可能被钦定在另外一条边后面,这样的情况很难维护。
但是在本题中,我们的偏序关系有其他的性质,它们必然是连续的,也就是说,对于一个偏序\((x,y)\),我们把点值从\((u,x)\)运入后,下一个在该点的操作必然是把点值从\((u,y)\)移出,否则我们运输来的值就不能转移到终点。
由于这样的关系,\((u,x),(u,y)\)两条边的顺序是密不可分的,中间不能插入其他值,只能在首尾插入。
这样的形式很容易用链表维护。
然后需要大力分类讨论,我们要考虑的是从一个点出发能够到达的最小节点,这与是否是起始、中间、结束的节点有关,对于边是否可以通过,由是否是最早删的边、最晚删的边以及在链表中的偏序关系决定,可以自己推敲推敲,这篇博客写的相当好。
最后不要忘记判\(n=1\)的情况。
话说一道链表题能够出到这种水平,质量还是相当高的。