【Atcoder】AGC009 B-E简要题解

这篇博客详细解析了Atcoder AGC009的B到E四道题目。B题是关于构建树并解决赢家问题的,采用贪心策略按子树深度排序进行分配。C题通过DP解决集合交替划分的问题,利用前缀和与二分查找优化。D题将原问题转化为点分治,寻找最小权值保证路径合法性。E题则是将原问题转化为满K叉树,使用性质和DP解决平均值问题。
摘要由CSDN通过智能技术生成

B.Tournament

连边 a i → i a_i\to i aii, 构成一颗树。

i i i需要在不同层打败他指向的所有选手。

f x f_x fx表示 x x x打完所有比赛且为最终的赢家时的子树深度。

递归处理完 x x x指向的所有选手 y y y后,贪心按 f [ y ] f[y] f[y]降序排序得到序列 q q q,从小到大安排到每一层, f [ x ] = m a x ( f [ q [ i ] ] + i ) f[x]=max(f[q[i]]+i) f[x]=max(f[q[i]]+i)


C.Division into Two

真的zz,DP都多想了一维…
实际上只需要转移一块一块的整体,并维护集合的不断交替。

考虑 d p dp dp
f [ i ] [ 0 / 1 ] f[i][0/1] f[i][0/1]表示处理到第 i i i位, S i S_i Si划分到了 A / B A/B A/B集合,且 S i + 1 S_{i+1} Si+1被划分到另一个集合的方案数,转移:
f [ i ] [ 0 / 1 ] = ∑ f [ j ] [ 1 / 0 ] f[i][0/1]=\sum f[j][1/0] f[i][0/1]=f[j][1/0] [ j + 1 , i ] [j+1,i] [j+1,i]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值