2020.11.30【NOIP提高A组】模拟

T1:首先有一个结论:每次肯定都是把权值最大的点周围还没有删的边都删掉,这个很好证。

然后可以把删边变成加边,接着用并查集维护;同时也可以直接用公式:ans=sum(a[i])-max(a[i])+sum(a[x[i]],a[y[i]])。这条公式的意义是除了最大值点之外的每一个点都会在作为某个最大值点被删之后某棵子树的最大值计算一次,这就是sum(a[i])-max(a[i]),而每次删去一条边还会计算一次这条边连接的两个点中权值较大的一个,这就是sum(a[x[i]],a[y[i]])。

比赛时想到了第一条性质,但是没想到接下来怎样处理。

 

T2:n^2的做法很好想,就是分类讨论删的两条边是否具有祖孙关系。

接着在n^2的基础上优化。我们dfs一遍整棵树,每次进一个点时把它的siz[x]加入线段树f1,出来时把它的siz[x]从f1中删去,再把它加入线段树f2。这样我们就维护除了和它有祖孙关系的集合(f1)以及和它没有祖孙关系的集合(f2)。

在统计答案时,我们每次强制siz[x]要选,然后剩下的两个siz肯定是越接近越优的,所以我们可以算出另一个siz[y]要尽量接近的值,在线段树上二分就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值