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 求出来, 其他数 自然而然得到了 
posted @ 2022-10-18 09:15  VxiaohuanV  阅读(17)  评论(0编辑  收藏  举报