Social Infrastructure Information Systems Division, Hitachi Programming Contest 2020 C.Three

本题解仅提供思路,不提供代码

给你一个树,n个结点,编号1~n,又有1~n n个数每个数可用一次

要求路径长为3条边的两个结点

需要赋值pi,pj 使得 pi+pj % 3==0 或 pi*pj %3==0

换句话说,这个题其实就是求两组点,一组赋 3i+1,另一组赋 3i+2,当然 3i 随便分到哪组都行

换句话说就是将距离为3的点划分为2组

那么从顶点出发,把奇数层涂黑,偶数层涂白

如果相距为3,那么一定一黑一白

对于这种分组,也是有可能出现

黑组元素数 < n/3 或是 白组元素数

黑组+白组=n,所以同

于是说,当同 >= n/3,可以无脑 一组赋 3i+1,另一组赋 3i+2,3i 随便分

当有一个 < n/3,把

于是整合在一起就是,把较小组先赋 3 的倍数,赋光 3 的倍数再赋 3i+1,另一组无脑赋剩余就完事

这个题的套路其实挺常见的,建议记一下

你可能感兴趣的:(Social Infrastructure Information Systems Division, Hitachi Programming Contest 2020 C.Three)