11.09
A.for ya
认为随机化找团没前途,考虑在反图上强行黑白染色,大概率能找出一个大小为 \(\frac{n}{3}\) 的独立集,但是有点麻烦,由于保证最大团的大小至少为 \(\frac{2n}{3}\) 了,所以我们 \(O(n^2)\) 枚举点对 \((i,j)\),若 \(i\) 和 \(j\) 没有连边,那么同时把这两个点删去,这样最坏情况也是一个不在最大团里面的点带走一个在最大团里面的点,最后能剩下一个大小至少为 \(\frac{n}{3}\) 的团。
其实随机化能过。
B.只因你太美
脑电波对上了但是读错题了。
贪心的填 \(w-1\) 个 \(1\) 和 \(1\) 个 \(w+1\),形似 \(1,\dots,1,w+1\) 这种序列,如果当前 \((d,h)\) 不合法当且仅当 \(h-\lfloor
\frac{d}{w}\rfloor w\ge d\) 或 \(h<d\)。然后就是恶心的分段计算二分找转折点分情况啥的。
C.lagtrain
将儿子分为两个集合,和定积最大。
这个东西其实就是对儿子进行一个背包,设 \(x\) 的儿子个数为 \(son[x]\),时间复杂度 \(\sum siz[x]son[x]\)。
由于是可行性背包,考虑 \(\text{bitset}\) 优化,但是 \(\text{bitset}\) 只能开定长怎么办,我们有有伟大的 \(\text{dynamic_bitset}\) ,每回 \(resize\) 成子树大小即可。
How to use dynamic_bitset
#include <tr2/dynamic_bitset>
using namespace std;
using namespace tr2;
dynamic_bitset <> b;
D.tamaya
一个线段对他有影响的最多就两条线段,即在它之前加入的且左端点小于它的左端点的编号最大的线段,和在它之前加入的右端点大于它的右端点的编号最大的线段,对于左边和右边我们分开考虑,然后就能建树了,查询就是在两个树上倍增找出最小的 \(l\)和最大的 \(r\)。