构造一个数列 $(i,j)$如果树上距离为$3$ 那么 $a[i]*a[j]=3k$或者$a[i]+a[j]=3k$
对于一个点$i$值不为$3$的倍数为$x$与他不发生关系的为距离$+1,+2,+4,+5,-1,-2,-4,-5$的点的的值都为$x$,(距离$(3,-3)$设置成$3-x$)发现距离为$(4,1),(-4,5),(1,-2)$这些点对不成立,那我只要保证距离相减不会出现$3$就好,那么让相隔距离为$2$。即距离为$2,4,-2,-4$的点值为$x$,其余为$2-x$。
这样就可以给树上染色成奇数点和偶数点。只要将奇数点塞进$mod=1$,偶数点塞进$mod=2$。
保证了相同数之间互不干扰,比如距离为(1,2,3,4,5)的点的值为$x,2-x,x,2-x,x$。距离为$3或1$的加起来一定为3。因为$3k$怎么给都$ok$。所以把剩余点给$3k$。
$n/2>=n/3$ 一定够塞的
代码
1 |
|