Potion Brewing Class (建图+质因数分解+树上DP)
题目大意:
给你n个点, 每一个点都是一个整数, 然后给你 n-1个关系, i j x y, ai/aj= x/y ,问你 怎么给每一个点赋整数值, 使得每一个关系都成立, 求出最小的点和
思路:
- 看到 n-1, 和 2个点之间的关系, 就要考虑建图, 建树图
- 然后 点和点之间 x/y 相当于是一个正比例关系, 而且 得一个点, 其他点都知道, 而且这个点越小, 点权和也越小
- 考虑从1号节点入手,开始树上dp
- 因为我们现在求a1, 就用a1 把其他点都给表示出来
- 其他点就变成了 x/y a1, (x/y 是最简的) 然其他点都是整数 a1/y 为整数,
- 因此考虑 对y质因数分解, x 必须 有这些质因数, 而且质因数的指数是 比他多的.
- 所以每dfs到一个点, 就 对 x和y质因数分解, 该消去的消去,该加的加, 每一个质因数保存一个最大值即可
- 把a1 求出来, 其他数 自然而然得到了