2020.07.24【省选B组】模拟

今天的题都比较简单。

T1:很容易想到状压dp。关键在于怎样判断用一个半径为r的圆是否能覆盖某个集合的点。其实这个也不难,我们可以暴力求出这些点两两间的最大距离,若maxdis<=2r则可以,否则不行。

 

T2:设f(d)表示gcd为d的对数,g(d)表示gcd为d的倍数的对数。首先g(d)=(n/d)*(m/d)(要下取整)。而f(d)=g(d)-sum(f(id))(i>=2)。可以证明时间复杂度是对的。求出了f之后,用线段树维护答案即可。

 

T3:首先求出任意一颗生成树,然后接下来要做的就是加边维护桥的操作。

具体可以用并查集来维护。首先对于每加入的一条边(x,y),先找到x和y的lca。具体操作就是每次把x和y中深度较大的那一个点跳到父节点。找到了lca之后,我们就把x和y到lca上的点的并查集都合并到lca上。注意到每合并一次没有合并过的点就会导致桥的数量减1,所以在合并的时候记录一下就可以求出答案了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值