七中高新信息学竞赛训练——2017寒假第二次练习赛题解

1.Study
拓扑排序+简单dp,删边的同时维护数组 f[i] (表示至少需要几学期才能学习完课程 i
当删除一条边(uv) 时, f[v]=max(f[v],f[u]+1) ,其他操作同拓扑排序

2.Bomb(HDU5934)
强连通分量
通过引爆半径判断,对所有炮仗 u,v 判断是否 u 能够引爆v,如果能则建边,然后求强连通分量。
我们发现对一个强连通分量,只需要引爆其中一个就能引爆其他的,所以我们肯定取代价最小的引爆,所以我们记录每个强连通分量代价最小的炮仗,对于强连通分量 i 我们有mincosti=minjij(costj),同时记录 placej=i ,这个可以在tarjan算法求强连通分量得到。
最后我们发现其实很多炮仗不用被点燃,因为会被其他点燃的炮仗引爆,所以我们只需要求出 ans=pi=0imincosti 。 统计 p[i] 时,对每一条边 (u,v) ,我们只对 place[v]!=palce[u]vp[v] 1
时间复杂度为O(n2)

3.Wire
二分+最小生成树
二分我们需要买的规格的线的长度 len ,只选取长度小于等于 len 的边,判断是否能构造一颗生成树,如果能则说明我们还可能去的更小,否则说明 len 取得太小
若使用Kruscal算法,只需要最开始对边排序(升序),然后只取第 1 条到限制的那条边即可,而判断是否能生成树只需要O(m),所以整体时间复杂度为 O(mlogm+mlogm) O(mlogm)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值