PKUSC2019D2T2

题意:

给定一颗 n n n个点的树,每条边的距离均为1,对每一个点构造一个 m m m维的坐标,使得任意两点的 m m m维坐标差的绝对值之和等于它们在树上的距离,且 m m m最小。

数据范围:

子任务1( 8 p t s 8pts 8pts):第 i i i条边连接点 1 1 1 i + 1 i+1 i+1
子任务2( 41 p t s 41pts 41pts):点 i i i连接点 i / 2 ( i > 1 ) i/2(i>1) i/2(i>1)
子任务3( 51 p t s 51pts 51pts):无特殊限制
全部数据, n ≤ 100 n\le100 n100

题解:

显然坐标经平移后能使有一个点所有维都是 0 0 0,为了方便,将这个点设为根。
对于子任务 1 1 1 2 2 2,由于给定了树的形态,故猜想以 1 1 1为根是最优的。
对于子任务 1 1 1 1 1 1的孩子将其中一维坐标变为 1 1 1 − 1 -1 1,故每两个孩子共用一维坐标(分别为 1 、 − 1 1、-1 11)其它维均为 0 0 0 m = ( n − 1 ) / 2 m=(n-1)/2 m=(n1)/2最优(显然以其他点为根不会更优)。
对于子任务 2 2 2,因为二叉树形态的对称性,考虑从根往下一层层做,贪心地使当前的维数尽可能小。手模一下前几层,新增加一层时,对于每个点的两个孩子,根据要分别将父亲坐标的维 + 1 +1 +1 − 1 -1 1,且与之前的点不冲突的原则,发现有一个可以将父亲最后一维非零数往其符号方向加 1 1 1,而另一个点没得改了,只好新增加一维,而每位可以往 + 1 +1 +1 − 1 -1 1两个方向增加。这样保证了前面的维都被用过,即不可能更优。
对于子任务 3 3 3,考虑沿用 2 2 2的思想,但感觉 1 1 1为根不一定最优,于是枚举根。同样一层层做,对于第一个孩子修改最后一维非零数,其它的只能新增一维。但这样做,对于新增加的同一维的 1 1 1 − 1 -1 1,若它们存在祖先后代关系,则孩子增加时就会修改到不应修改的一维,要使之合法,就要浪费 1 / 2 1/2 1/2维。考虑如何避免这种浪费,使第一个孩子(修改最后一维非零数的孩子)的孩子数 > 1 >1 >1(如果有的话)即可。
然而这样是 O ( n 3 ) O(n^3) O(n3)的,考虑以哪个点为根可以保证不浪费,同理,只要度数 > 1 >1 >1,并使第一个孩子的度数 > 1 >1 >1即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值