第五天!!!
0.杂谈
早上断网了,所以中午才开始写。
打开题面开幕雷击:即得易见平凡。
发现题一个也不会爬了!
交代码发现有人交了田所浩二,所以交了一个全是 while(1);
的香风智乃
中午兔来了,给大家直播审退回题解。
1.简易题解
A
有一个无向完全图,给出了一些边权,其余的是 \(2147483647\)。询问一些点集的最小斯坦纳树的边权和。
其实斯坦纳树什么的是坑人的。
设 \(f_S\) 为 \(S\) 内部能连通的最小代价,初始状态为 \(f_{\varnothing}=f_{\{u\}}=0\)。
考虑如何转移。我们揪出它生成树中的一个叶子来转移,方程为 \(f_S=\min\limits_{u\in S}\{f_{S-\{u\}}+\min\limits_{v\in {S-\{u\}}}\{w_{u,v}\}\}\)。其中 \(w_{u,v}\) 为 \(u,v\) 之间的最短边长。
然后只需要高维后缀最小值即可求出答案。
B
给出一个字符串,每次询问 \([l,r]\) 中本质不同的子序列个数。
今天你他妈必须给我学会子序列自动机!!!!!!!
这题暴力 dp 有 60……导致我即使剩下两题 0 了也没垫底……
并没有搞很懂……先把题解抄写一部分在这里……
不妨设字符集为 \(\Sigma=\{1,2,\dots,|\Sigma|\}\),建立原串的子序列自动机,设状态编号从 \(0\) 到 \(n\)。
询问 \([l,r]\) 相当于求从 \(l\) 出发,编号在 \([l,r]\) 中的点形成的路径条数。
对于一条路径,取 \(i\ge l\),将 \(i\) 以后的部分截断,做线头 dp。
此时路径要么全在 \(i\) 左侧(说成 \(j=|\Sigma|+1\)),要么在 \(j\) 处被截。
记 \(g_{l,i,j}\) 表示本质不同的截线左侧的方案数,那么 \(g_{l,i,j}=g_{l,i-1,j}+g_{l,i-1,s_{i-1}}\),初始状态为 \(g_{l,l,j}=1\)。
可以把它写成矩阵形式转移:\(\vec{G}_{l,i}=A_{r-1}\dots A_l\vec{u}\),其中 \(\vec{u}\) 为初始向量。
发现 \(A\) 的形式简单,考虑对每列维护整体加的标记,每行维护一个和。
C
懒得概括把原题面搬来了
甲城是一座新兴城市,城里开设了 \(n\) 座工厂,分属 \(k\) 家单位(有的单位可能没有工厂),其中第 \(i\) 座工厂属于第 \(c_i\) 家单位。
目前,甲城的路网还相当不发达。城内有 \(n−1\) 条道路,每条道路的两端是不同的工厂。如果将工厂视作图的点,道路视作图的边,那么这张图是仙人掌(原题面似乎有锅,应为树)。
现在甲城决定开通该城的前两条公交线路。目前已经决定了:
- 每条公交线路将连接两座不同的工厂,且两座工厂属于同一单位。
- 每条公交线路在现有道路上行驶,且往返的路线是一致的。
- 一条公交线路不会重复经过同一座工厂,两条线路也不会经过同一座工厂。
我们认为:仅仅将某条公交线路的上行、下行方向互换,得到的是本质相同的线路;将两条公交线路互换,得到的也是本质相同的一组方案。
在公交线路的运行过程中,有可能某座工厂由于临时施工,不适合作为公交线路的首末站。不过两座工厂不会同时临时施工。
现在,甲城学生算法竞赛协会悬赏 \(100\) 分,请你对于平时和 \(m\) 次工厂临时施工的情况,分别求出开通公交线路的方案数。
两条路径相交需要讨论 LCA 的位置,设 \(f_i\) 表示子树内经过 \(i\) 的路径数,\(g_i\) 表示总共的经过 \(i\) 的路径数。
可以对每种颜色建虚树,考虑一条边和一个点的贡献,需要支持树上单点加和链上加,可以树上差分。
(为了方便下面都是有顺序的,答案可以直接除)
把 \(f\) 前缀和,设为 \(F\),那么有公共点的式子就是 \(F_u+F_v-2F_{lca}+g_{lca}\),\(u\) 的答案是总的路径数 \(\sum\limits_{i=1}^nf_i\) 减去有重的。
在颜色虚树上统计答案,只需要统计 \(2F_{lca}-g_{lca}-F_v\) 的贡献。
然后就不会啦!待填坑……
2.线代与多项式杂题选讲
1
给出一个随机数生成器(根据个人码风改动过):
us LL seed;
us LL getint(){
seed^=seed<<13;
seed^=seed>>17;
seed^=seed<<5;
return seed;
}
多次询问,求第 \(n\) 次生成的值。
把一个 \(64\) 位整数看成一个 \(64\) 维向量 \(\vec{w}\),那么位移和异或都可以转化为左乘一个矩阵。
求出一次变换的矩阵 \(A\),答案就是 \(A^n\vec{w}\),压位后矩乘 \(O(64^2)\),矩阵乘向量 \(O(64)\)。
可以预处理出 \(A\) 的一些幂,查询时像快速幂一样将 \(n\) 表示出来即可。
2
题面见 LOJ6247。
知识点:单位根反演。
即 \([k|n]=\dfrac 1k\sum\limits_{i=0}^{k-1}\omega_k^{in}\)。
我们把式子反演掉,就有
,而模意义下的 \(\omega_k\) 就是 \(g^{\frac{p-1}{n}}\),本题结束。
3
题面见 BZOJ3453。
给定 \(k,a,n,d\),求 \(\sum\limits_{i=0}^n\sum\limits_{j=1}^{a+id}\sum\limits_{l=1}^j l^k\bmod\ 1234567891\)。
没错,正解是三次插值。
4
题面见洛谷 P5472。
分析洗牌的行为,发现它可以看成先任意打乱原序列,再按照原顺序就地排序好。
可以猜到一个结论就是洗牌后的期望分值为下标的二次式,那么插它就行了。
证明补充:设首次洗牌后一张牌位于 \(j\),那么它原位置为 \(i\) 的概率为:
如果你对混凝土数学上的几个组合恒等式比较熟悉,那么显然有 \(\sum\limits_{i=1}^{A_1}\dbinom{j-1}{i-1}\dbinom{n-j}{A_1-i}\dbinom{i-1}{k}=\sum\limits_{i=k+1}^{A_1}\dbinom{j-k-1}{i-k-1}\dbinom{n-j}{A_1-i}\dbinom{j-1}{k}=\dbinom{n-k-1}{A_1-k-1}\dbinom{j-1}{k}\),另一侧同理。
所以原期望分值为 \(i\) 的 \(k\) 次式时,现期望分值为 \(j\) 的不超过 \(k\) 次式。\(\Box\)