FJWC2020
挑一些没做出来的讲讲
D1T2
题意:\(n\)点\(m\)条边的图,给边定向,使得存在点使得\(1\)和\(2\)能走到该点
\(n\le 15,m\le {n\choose 2}\)
求不存在点使得\(1\)和\(2\)同时走到该点
枚举集合\(A,B\),表示\(1\)能到达的集合,\(2\)能到达的集合
- \(A\cap B=\emptyset\)
- 不存在边\((u,v)\),\(u\in A,v\in B\)
- \((u,v)\in E,u\notin A,v\notin B\),该边怎么定向都无所谓
- \((u,v)\in E,u\in A,v\notin B\),该边方向确定
然后单独处理\(A,B\)内的,令\(f_{1/2,S}\)为\(1\)到达点集为\(S\)的方案数
\(O(3^n)\)
D1T3
题意:给定长度为\(n\)的字符串,找到最大的\(m\),使得存在\(1\le l_1\le r_1\le l_2\le r_2\le \cdots\le l_m\le r_m\),\(s_{l_{i+1},r_{i+1}}\)是\(s_{l_i,r_i}\)的严格子串
结论1:存在最优解,使得子串长度每次减小\(1\)
令\(f_{i}\)为以\(i\)开头的子串作为第一个,最大的\(m\)
结论2:\(f_{i}\le f_{i+1}+1\)
证明:
相当于证明\(f_{i+1}\le f_{i}-1\),这很显然
那么每次判断初始化\(f_i\)为\(f_{i+1}+1\),然后一步步判断
考虑如何判断\(f_i\)大于等于\(len\)
- \(j\in[i+len,n]\)
- \(max(lcp(suf_i,suf_j),lcp(suf_{i+1},suf_j))\ge len-1\)
- \(f_j\ge len-1\)
条件2的\(j\)分为可以二分出来,然后就是\(j\in[i+len,n],rank_j\in[l,r]\),是否存在\(f_j\ge len-1\),可以用线段树维护
D2T1
题意:有一个长度为 \(n\) 的数列,原先每一个位置都是 \(0\)。每一次,我们可以给两个相邻的位置分别 加一 和 加二 。问最少需要操作多少次,才可以使得对于 \(1≤i≤n\),第 \(i\) 个位置上的数大于等于 \(h_i\)
看不懂题解...
D3T2
这题很有意思啊
题意:给定\(n\) 个点 \(m\) 条边的无向图,求有多少个非空点集的导出子图连通。
\((x,y)\in E\) 满足 \(|x−y|≤12\)。
答案对 \(2\) 取模,\(1≤n≤50\)
考虑对连通块黑白染色,那么对于一个子图,染色的方案数为\(2^{连通块个数}\),该为对\(4\)取模,若最后答案为\(2\)则为\(1\),否则为\(0\)
状压点的颜色。\(O(3^{12}n)\)
D4T3
题意:给定一棵 \(n\) 个点的有边权的树,\(q\) 次修改某一条边的边权,要回答在初始局面和每次修改后,有多少条无向路径 \((u,v)\) 满足路径上所有边的 gcd 恰为 \(1\)
\(n\le 10^{5},q\le 100,w,x\le 10^6\)
先考虑\(q=0\)
令\(f(i)\)为路径为\(i\)倍数的个数,\(ans=\sum \mu(i)f(i)\)
由于\(w\le 10^6\),\(w\)最多质因子个数为\(7\),每条边的有效约数为\(2^k\le 128\),用并查集做\(O(2^k n\alpha(n))\)
考虑\(q\ge 1\),对于\((u,v,w)\in E\),考虑撤销\((u,v,w)\)的效果,再添加\((u,v,w')\)的效果
处理\(u\)、\(v\)的子树,令\(g(i)\)为\(i\)到\(u/v\)边权的gcd,\(O(nlogw)\)。再合并,\(O(\sqrt{w}\cdot \sqrt{w})\)
\(O(2^k n\alpha(n)+q\cdot (nlogw+\sigma(w)_0\cdot \sigma(w)_0))\)
D5T1
给定一个长度为 \(n\) 的序列 \(a_1,a_2,⋯,a_n\) ,\(a_i\)为在 \([l_i,r_i]\) 中独立均匀随机生成的实数,求这个序列逆序对个数的期望值
D5T3
给定一个 \(1\) 到 \(n\) 的排列,你需要把它升序排序。你要进行两个阶段的操作。第一阶段中,每次任选两个相邻元素并进行交换。第二阶段中,每次修改一个位置上的元素。最小化两个阶段操作的总次数,并给出一种总操作次数最小的合法方案。
在第一阶段中,若进行过\(i,i+1\)交换,则\(i\)与\(i+1\)之间连边
对于极大连通块\([l,r]\),令其逆序对个数为\(x\)
若\(x\ge r-l+1\),则可以通过第二阶段直接搞,故在最优中不会出现
因为对于一个连通块\([l,r]\),其至少有\(r-l\)条边,故\(x\ge r-l\)。
所以所有的极大联通块,其逆序对个数为\(r-l\)
故对于区间\([l,r]\),其可能成为极大连通块的条件为
- \([l,r]\)是\(a_l,\cdots,a_r\)的值域
- \(a_l,\cdots ,a_r\)的逆序对个数为\(r-l\)
若\([l_1,r][l_2,r](l_1<l_2)\)均满足条件,则选择\([l_2,r]\)不会劣于\([l_1,r]\)。故我们会选择以\(r\)为右端点的最大合法\(l\)
根据对极大连通块的定义,最大的合法\(l\)只需要考虑最大满足条件\(1\)的
考虑第一个条件的充要条件
- \(max(a_l,\cdots,a_r)=r\)
- \(\sum\limits_{i=l}^r (a_i-i)=0\):前缀和相等
考虑如何快速求\([l,r]\)的逆序对,由于\(a_l,\cdots,a_r\)的值域是\([l,r]\),\(a_1,\cdots,a_{l-1}\)中的任意数,要么全部大于\([l,r]\),要么全部小于
令\(sum_i\)为\(a_1,\cdots,a_i\)的逆序对个数,\(f(l,r)=sum_r-sum_{l-1}-(r-l+1)\sum\limits_{i=1}^{l-1}[a_i>l]\)
然后随便搞个dp

浙公网安备 33010602011771号