Luogu5659 树上的数

https://www.luogu.com.cn/problem/P5659

A:震惊!举世闻名的毒瘤题!是不是用到一堆毒瘤算法?

B:深搜、链表。

A:???

一道大力分类讨论好题。

考虑贪心的思路,我们从小到大移动数字,每次贪心地把当前枚举到的点移动到可以移动到的最小位置,这样得到的答案必然正确。

本题的难点在于如何判断一个点是否能够移动到另一个点。

我们考虑与一个点\(u\)相连的一些边之间可能存在偏序关系。

也就是说,一条边可能被钦定在另外一条边后面,这样的情况很难维护。

但是在本题中,我们的偏序关系有其他的性质,它们必然是连续的,也就是说,对于一个偏序\((x,y)\),我们把点值从\((u,x)\)运入后,下一个在该点的操作必然是把点值从\((u,y)\)移出,否则我们运输来的值就不能转移到终点。

由于这样的关系,\((u,x),(u,y)\)两条边的顺序是密不可分的,中间不能插入其他值,只能在首尾插入。

这样的形式很容易用链表维护。

然后需要大力分类讨论,我们要考虑的是从一个点出发能够到达的最小节点,这与是否是起始、中间、结束的节点有关,对于边是否可以通过,由是否是最早删的边、最晚删的边以及在链表中的偏序关系决定,可以自己推敲推敲,这篇博客写的相当好。

最后不要忘记判\(n=1\)的情况。

话说一道链表题能够出到这种水平,质量还是相当高的。

posted @ 2020-11-01 18:19  GK0328  阅读(68)  评论(0编辑  收藏  举报