题意:有一群兄弟去野餐,可以自己开车到目的地,或者开车到A的家里,然后和A一起去目的地。但目的地的停车场不一定容得下,如果每个人都自己开车去的话。所以这对连接到Park的边数有个限制。求他们总路径的最小值。
思路:利用最小K度限制生成树。
步骤:1.先求出最小m度限制生成树:将所有与Park连接的边去掉,得到一个或多个连通分量,各自求其最小生成树。当求出一个最小生成树T时,挑其中一个与Park最近的点,作为T的根,并以他为起点,求T上其他点的father节点。
2.由1,求m+1度限制生成树:先做处理,求出best[]数组,即比如best[3]=2,即3到Park路径上的最大的边权由2及father[2]构成。之后,寻找一点x,使得g[source][x]-g[best[x]][father[bext[x]]]的和最小,并把边{best[x],father[best[x]]}去掉。
3.当为K度限制生成树时,停止。
注意点:注意更新过程中,Best()函数的书写。
详情请看IOI2004国家集训队论文,由汪汀所著。