省选模拟28 29

昨天的
A. 战略游戏
题意:n个点的树,选出k个无序点对,走路径,要求每条边满足(被所有经过)或(只被一个经过)或(不经过),且被所有经过的边个数>0,求方案数。n,k<=1e5
暴力枚举都没想到,枚举经过所有的路径的两个端点x,y,答案为分别在x和y的不同子树中选k个的方案数乘积之和。
也可以选到x和y的根,所以枚举有多少没有选到根,乘上A(k,i),求和。
考虑能不能预处理x的不同子树选k个的方案数\(f[x]\),构造生成函数\(F(x)=\prod(sz_ux+1)\),可以分治fft求解
那么\(f[x]=\sum [x_i]F(x)A(k,i)\)
统计答案有两种:
x,y无祖先关系:树形dp
有祖先关系:不同在于,较浅的点的f包含了y所在的子树而不包含父亲。方案的变化为\(\frac{(n-sz_u)x+1}{sz_vx+1}\),都是一次多项式,模拟竖式做除\(O(degree)\)
设变化后的多项式\(G(x)=F(x)\frac{(n-sz_u)x+1}{sz_vx+1}\),那么如果把\(G(x)\)都处理出来复杂度不对。
但是可知\(u\)\(sz_v\)不同取值只有\(\sqrt{sz_u}\)种,所以复杂度是\(n\sqrt n\)

B. 小b爱取模
区间加转化为差分。
直接差分就能得到一组解,但由于是模k意义下,不一定最优。
-x=-x+k,所以一个点既可以是左端点也可以是右端点
答案统计放在左端点,也就要贪心使得右端点更多。
所以默认都作为右端点,当前缀和<0的时候,从前边选当前还能选的最大的a,反转为左端点。

C. 小b爱实数
\(ans=min(|f-\frac{s_r-s_l}{r-l}|)=min(|\frac{(s_r-rf)-(s_l-lr)}{r-l}|)\)
如果把\((i,s_i-if)\)视为二维坐标系上的点
要求的就是最小斜率,按纵坐标排序,答案一定在相邻的点间。

今天的
A. circle
当k个点中也存在环那么无解
不然问题可以简化为:n个黑白点,黑白各自形成DAG,求删掉最少的黑点使得整体形成DAG
竞赛图形成DAG,只有一种形态,一条链,每个点向其后边所有点的点连边。
可以求出黑白各自的拓扑序,一定唯一。
有环那么一定是很多三元环组成,颜色有两种组合,白-黑-白这样的黑点必须删掉。
否则对于一个还存在的黑点,其与白点的连边按拓扑序增大方向一定是 入-入-入-出-出-出,设第一个出为L[x]
那么最多保留的黑点数其实就是L的LIS。必须删的点可以用L<=R判断

C. simulate
优化模拟。
发现顺序是不重要的,可以不按照轮为阶段模拟。
从1->n枚举i,保证<i的只有01,计算i对于左侧的贡献,而把对右侧的放到i+1上先不管。
当a[i]>=2时分情况讨论:
1.左侧有0:把最近的0右移一格,--a[i],++a[i+1]
2.左侧无0:a[1]=0,--a[i],++a[i+1]
3.i-1为0:a[i+1]=1,a[i]-=2,++a[i+1]
用栈记录0的位置,对于1接3操作直接计算右移次数。
复杂度为\(O(n)\)

猜你喜欢

转载自www.cnblogs.com/hzoi-yzh/p/12354774.html
29