2018.01.18【GDKOI2018】模拟B组

T1:因为一棵树有n-1条边,所以我们可以从这里下手。

首先,特判n=1的情况,然后把所有点的度加起来在除以2,求出来的就是边数,而这个数如果等于n-1的话这就可能是一棵树,若不等于则这一定不是一棵树。


T2:首先从小到大排序,然后二分答案。

那么怎样判断二分出来的mid是否可行呢?

首先,对于每一个数,在序列中一定有一个以它为左端点的区间,使得区间中max-min不大于mid。

因为已经排好序了,所以这个数一定是区间中的min,并且所有区间的右端点是单调不递减的。我们用单调队列求出每一个点所对应的区间,那么现在问题就转换成了在序列中是否可以选出R组连续的数,每组数有C个数,并且选出来的数既不能重复,每一组数有必须在一个区间中。而又因为区间是不递减的,所以我们可以用贪心的思想,优先选左边的数。看看能选出来多少组,最后和R进行比较就行了。


T3:首先把与金子有关的树建出来,这个可以排一边序,然后公共部分同编号,不同部分新开节点来做。

建好之后,设g[x]表示x的叶儿子节点到x的最大值,f[x]表示要达到这个最大值x要往那个儿子走。显然,g[叶子]=1,f[叶子]=0。

接下来,我们可以求出整棵树的f和g。然后,我们依次放置n个机器人。每放置一个时,这个机器人的价值为g[根],放置完之后我们对f个g进行修改,也就是顺着f走下去,把那个叶子节点删掉,再修改沿路的f和g。这就完成了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值