czy

bzoj5424烧桥计划

f[i][j]暴力,可以分两段转移,更近的一段单调队列

发现,最多分成sqrt(n)段。

因为如果只有一段,ans=n*2000

而如果多段,至少是∑i*1000,那么,i的上界是sqrt(n)级别的。

所以,O(nsqrt(n))

(什么题啊)

 

ywy

CF1086F Forest Fires 

考虑统计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

51nod1584 加权约数和

没出太大的锅,但是线性筛好像做不了了。

 

zrq

P4566 [CTSC2018]青蕈领主

类析合树

然后把儿子缩点,推式子,cdq分治FFT

 

ztb

 

PKUSC2019 D2T2

zzh

n个人,每个人手上有 a_i 个相同物品,两人的物品不同,有先后m次交换,每个x和y可以交换一件物品(可以不交换),最大化最终1手上的物品种类n3000

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点流量。