2018.8.21

完了差点就爆零了Orz……

 

T1

 

完了一来就想到了正解的思路(最大生成树+乱搞(我想的点分治))开始跑最大生成树结果写到一半之后发现了居然不是边权Orz马上懵逼了,然后然后然后就不会跑点权的最大生成树了,鹅就没有办法了坐等此题爆零……

 

其实学到了如何在点权树上跑最大生成树啦,首先经过两个点的那条边一定要考虑这两个点的贡献,那么这条边所连接的两个点的点权的最小值就可能对经过这条边的某些路径做出贡献,所以这条边的边权就是所连两点的点权的最小值!那么就转化为了边权的最大生成树啦跑个克鲁斯卡尔就好啦嘿嘿……

 

其实完全不用点分Orz,原来做过一道叫做 “营救” 的垃圾最大瓶颈生成树的题,在合并两个并查集的时候计算贡献就好啦,由于两个并查集所有点都要经过这条边,那么所得到的高兴值就是 siz [ 并查集1 ] * siz [ 并查集2 ] * 边权!(就 TM 一个点权最大生成树就把我拒之门外真难受啊……)

 

T2

 

一来就建线段树,线段树上的节点所代表的线段就是真正的线段,那么如果节点的值是1表示能够完全覆盖一根线段,然后全新的修改方式去维护,但是这样无法处理跨区间的线段啊,所以说还是要处理一下区间与区间中点处的线段覆盖情况,查询就很灵性啦,还需要考虑中间的线段……但是没有成功地看到苟了多少分——MLE,真是太难受了……

 

其实 CDQ 或者两个树状数组就搞定啦,直接用右端点的前缀区间个数减去左端点减一位置的前缀区间个数就好啦,由于单调递增的区间长度所以这样做是不从不漏的!

 

T3

 

Zc TQL 有没有,由于 k 严格小于 n 和 m 的最大值,考虑将长度大的一维作为行数,那么一定有一行什么都没有填,所以可以用这一行为其他已经有数的行的为所欲为买单,想一想为什么:如果 n + m 是偶数那么这个矩阵一定是合法的,反之非法,所以无论如何空的那一行一定可以填一种的方案使得之前的烂摊子变成正确的,那么烂摊子中每一行的每一个数就只有两种填法,1 或 -1,那么每一行剩下的数只要能够有一个空位来弥补之前这一行其他空格的为所欲为的烂摊子就好了,这样的填法也是唯一的,所以每一行的方案是 2^{len[j]-1}len[i] 表示第 i 行还剩下多少个空位,减一是为了要留出弥补的空位,根据乘法原理将每一行的为所欲为乘起来就是答案,注意要用快速幂!

 

注意如果是合法矩阵需要特判掉如果说有一行的 -1 的个数是偶数且这一行所有的数都被填掉了,那么一定是非法的,这是退出程序输出 0 ……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值