一、题目大意及算法分析
给n个点,m条边的图,所有边被摧毁,然后要建一棵树把点都连起来。第i个点有ai的材料,要连一条边需要x的材料,要修i点到j点的边,必须i点和j点总共有x的材料。在修好的边上可以运输材料。
问能否建出这棵树,要连哪些边,连边顺序是什么。
1.输出YES的条件是什么?
猜想,如果所有点权和不到 ( n − 1 ) ∗ x (n-1)*x (n−1)∗x,则一定可以在任意一个生成树上完成建图,只要考虑顺序就行了。(心里想的是材料反正可以随便运)
证明如下:
①对于一棵生成树,其某个叶子结点u,若其点权大于等于x,则由u来承担其到fa[u]的边权,并把多于x的部分给到fa[u],因为如果不给的话,就算放在u里面也没用。
②若u的点权小于x,则将u去掉,对于剩下的n-1个点的生成树,仍然满足①的性质(因为u的点权小于x,所以去掉u的点权之后,剩下的n-1个点的点权仍大于等于 ( n − 2 ) ∗ x (n-2)*x (n−2)∗x)。等到n-1个点的生成树建立完成后,再连到u的边。可假设一个极端情况,设点u的点权为 y ( y < x ) y(y<x) y(y<x),且整个n个点的生成树的点权和为 ( n − 1 ) x (n-1)x (n−1)x,则剩下n-1个点建完