给你一个数kkk,请你构造一棵节点数量小于等于5000的直径数量为kkk的树。
我们定义这棵树的直径为,所有满足1≤i 1≤k≤5×106,0≤wi≤1051\leq k\leq 5\times 10^6,0\leq w_i\leq 10^51≤k≤5×106,0≤wi≤105,wiw_iwi表示第iii条边的边权。 构造一个菊花图,根节点有三个儿子,每个儿子所在的子树大小分别为a,b,ca,b,ca,b,c且都是一条由权值为0的边组成的链,那么直径为ab+bc+caab+bc+caab+bc+ca。 我们可以枚举ccc,将k+c2k+c^2k+c2分解质因数,直到找到合适的(a,b,c)(a,b,c)(a,b,c)即可。 经过计算可以证明有很高的概率存在这样合适的解,实际上对于所有的kkk都如此。 当然,这种方法不一定完全正确,有可能需要四个或更多儿子才能构造出。更好的方法,请看我的另一篇博客。 如果wiw_iwi不能为000,怎么办呢?我们把根节点的每个儿子分别设置对应多个儿子,使得这些儿子没有儿子且到其父亲边权为1即可。
题解
我们需要令k=ab+ac+bc=(a+c)(b+c)−c2k=ab+ac+bc=(a+c)(b+c)-c^2k=ab+ac+bc=(a+c)(b+c)−c2。code
#include
一些思考