czy
bzoj5424烧桥计划
f[i][j]暴力,可以分两段转移,更近的一段单调队列
发现,最多分成sqrt(n)段。
因为如果只有一段,ans=n*2000
而如果多段,至少是∑i*1000,那么,i的上界是sqrt(n)级别的。
所以,O(nsqrt(n))
(什么题啊)
ywy
考虑统计f[i],i时刻能覆盖的个数
ans=t*f[t]-∑f[i]
∑f[i]矩形面积并,插值
yjc
https://codeforces.com/problemset/problem/1172/C2?tdsourcetag=s_pcqq_aiomsg
f[w][i][j][k]大暴力
k可以省去,f[w][i][j],j,i可以砍到m
有结论:f[w][i][j]=w*f[1][i][j]
关于轮数i,进行归纳法可以证明,i=0显然成立,求出i>=1时f[1][i][j]的式子,对比f[w][i][j]的式子,发现f[w][i][j]=w*f[1][j][k],
得证。
zky
没出太大的锅,但是线性筛好像做不了了。
zrq
类析合树
然后把儿子缩点,推式子,cdq分治FFT
ztb
zzh
n个人,每个人手上有 a_i 个相同物品,两人的物品不同,有先后m次交换,每个x和y可以交换一件物品(可以不交换),最大化最终1手上的物品种类。n≤3000
m,n,xi,yi,ai给定
首先,每个人手上的ai个等于1个。最终目标是给1,只算一种,让那条路径给过去即可。所以多了没用。
ai的作用是限制第i个人手上同时最多ai个。
然后网络流:
对时间拆点,n*m个点,
如果(x,y)在t时刻交换,则$(x_t)->(y_{t+1})$,$(y_t)->(x_{t+1})$流量为1
任意t,$(i_t)->(i_{t+1})$流量ai
S到$(i_t)$流量1,表示一种物品
$(1_m)$到T流量inf,表示最终种类数。
n*m个点只保留有用的即可。
最大流。
如果$(x_t)->(y_{t+1})$流过去,代表:“决定把某个种类最终传给1”,所以把这个“种类”传过去。
(某一时刻,x的$(x_t)->(x_{t+1})$没有满流,代表手上还有一些x号物品(初始的),
此处,如果没有同时的$(y_t)->(x_{t+1})$,其实代表x交换给了y一个x的初始元素过去,
由于并不想到达1,所以没有把“种类”传过去。
)
1和种类有关,所以就是种类代表点了。即1点流量。