口胡选手养成记(持续更新中……)

版权声明:湘 ICP 证 66666666 号 | Copyright © 2002-2019, ♂Hany01♂, All Rights Reserved 难道会有人转蒟蒻的博文?? https://blog.csdn.net/hhaannyyii/article/details/82184092

由于Hany01比较菜,也比较懒,有些题目不想写了,于是搞了个口胡题集。。


[CF97E] Leaders(双连通分量)

Description

给定一张无向图,每次询问 u , v 之间是否存在长度为奇数的路径。

Solution

先搞出每个联通块的生成树。如果 u , v 不在同一个联通块就直接判掉。如果在生成树中的距离为奇数,直接输出Yes。剩下的就只要考虑是否有边被奇环包含了。

结论:点双连通分量中如果存在一个奇环,那么每一条边都至少被一个奇环所包含。

我们跑出点双后,如果存在奇环,将所有除最顶端以外的点标记为1(即把所有在点双中的树边标记为1)。
最后处理询问时只要检查路径上是否存在被标记的边即可(对标记累个前缀和, s u m u + s u m v 2 × s u m l c a ( u , v ) )。


[BZOJ4753][JSOI2016] 最佳团体(分数规划,树上背包)

Description

给定一棵树,每个点都有一个费用和价值。要求选不超过 k 个点,使得总价值除以总费用最大。

Solution

二分答案 d ,即判断 v w x ,将权值变成 v i x × w i ,求选出来的点的权值和是否不小于 0 即可。


[BZOJ3687] 简单题(背包,bitset)

Description

给定一个数的集合 a i ,求所有子集的和的异或和。
a i 200000

Solution

先考虑一个暴力的背包DP,设 f i 和为 i 的的子集个数,那么有转移: f j + = f j a i 。由于我们只要考虑奇偶,所以可以用0/1来表示 f i ,并将加法运算改成异或运算。接着我们可以用std::bitset来优化这个转移,因为bitset可以方便的左移,将 f j a i 左移 a i 位就可以转移到 f j 了。最后对于每个 f i = 1 ,将答案异或上 i 即可。


[Hihocoder1167] 高等理论计算机科学(树剖)

Description

给定一棵树和很多条链,问有多少对链是相交的。

Solution

考虑将链依次加入,将链上的点权都+1,链上的边权都-1。计算有多少条链与新加入的链相交,只要搞出新链上的权值和即可。

猜你喜欢

转载自blog.csdn.net/hhaannyyii/article/details/82184092
今日推荐