Moscow Pre-Finals Workshop 2019. KAIST Contest

本来打算开\(\text{2019-2020 XX Opencup GP of Tokyo}\)的,然后发现有道\(\text{DFA}\)题,所以换到这场了。

会做的:\(A\)\(C\)\(F\)\(H\)
看了题解才会的:\(E\)\(G\)\(I\)\(J\)
看完题解也不会的:\(D\)
看了下题解长度直接跑路的:\(B\)

E

题意:
给定\(2n\)种菜单,每种菜在早上和晚上的价格不同\(a_i,b_i\),不能吃两次同一种菜。
求每次\(i\in [1,n]\),经过\(i\)天的最小花费(每天吃两顿)。

考虑费用流
\(S\longrightarrow i(flow:1,cost:0)\)
\(i\longrightarrow t_1(flow:1,cost:a_i)\)\(i\longrightarrow t_2(flow:1,cost:b_i)\)
\(t_1/ t_2\longrightarrow T(flow:k,cost:0)\)
这个\(k\in[1,n]\)

考虑每次\(t_1,t_2\)\(T\)间分别增加一个流量。
考虑模拟费用流,比如早餐增加1,只有两种情况

  • 一个原本没点过的,吃早餐
  • 一个原本作为晚餐的,改成早餐,然后一个原本没点过的,吃晚餐

为什么不能反悔多次呢?如果中间经历了至少反悔两次,证明这个交换会更优,那么之前就已经交换过了。

G

题意:
给定\(K\),全集为\(U=\{0,1,\ldots,2^K-1\}\),若子集\(A\subset U\)是好的当且仅当:
(1)若\(x,y\in S\),则\(x\And y\in S\)
(2)若\(x,y\in S\),则\(x\mid y\in S\)
给定长度为\(n\)的子集\(\{a_i\}\)\(a_i\in[0,2^K-1]\))。求包含这个子集的好的\(A\)的数量(\(A\)不为空集)。

场上想出这题的人脑子长啥样的/kel

对于每一个数字\(x\in[0,2^K -1]\),都可以描述成一个子集\(S\subset U\)\(U=\{0,1,\ldots,K-1\}\)),注意这里的\(U\)与题面中不同。

定义1:对于一个有向图\(G=(V,E)\),若存在\((x,y)\in E,(y,z)\in E\),则\((x,z)\in E\),则将\(G\)称为传递图

定义2:子集族\(\mathcal{F}\)对运算$\cap ,\cup \(封闭,\)\empty \in \mathcal{F},U\in \mathcal{F}\(。令\)f(\mathcal{F})\(为子集族\)\mathcal{F}\(到\)G\(的映射。具体而言,\)G=(V,E)\(,其中\)V=U\(,\)E={(u,v):\forall S\in \mathcal{F},u\in S,\text{s.t.}v\in S}\(。换言之,若对于\)u,v\(,每个包含\)u\(的集合均包含\)v\(,那么有向边\)(u,v)\(存在于图\)G$。

显然,这个图\(G\)是传递图。

定义3:对于传递图\(G=(V,E)\),其中\(V=U\)。令\(g(G)\)为传递图\(G\)到子集族\(\mathcal{F}\)的映射。具体而言,\(\mathcal{F}=\{S\subset U:\forall u\in S,(u,v)\in E,\text{s.t.} v\in S\}\)。换言之,若有向边\((u,v)\in E\),对于每个\(S\in \mathcal{F}\),如果\(u\in S\),则\(v\in S\)

简单分析可得这个子集族\(\mathcal{F}\)对运算\(\cap,\cup\)封闭。

引理
\((i)\):子集族\(\mathcal{F}\)对运算\(\cap ,\cup\)封闭,若\(\empty\in \mathcal{F},U\in \mathcal{F}\),则\(g(f(\mathcal{F}))=\mathcal{F}\)
\((ii)\):对于任意传递图\(G\),满足\(f(g(G))=G\)

证明
\((i)\)
对于任意\(S\in \mathcal{F}\),假设\(S\not\in g(f(\mathcal{F}))\)(令\(f(\mathcal{F})=(V,E)\))。
由于\(S\not\in g(f(\mathcal{F}))\),即\(\exists u\in S,v\not\in S\)\(\text{s.t.}(u,v)\in E\)。由于\(u\in S,v\not\in S\),那么\((u,v)\not\in E\),矛盾。
\(g(f(\mathcal{F}))=\mathcal{F}\)
\((ii)\)
对于任意\((u,v)\in E\)\(G=(V,E)\)),假设\((u,v)\not\in f(g(G))\)
由于\((u,v)\not\in f(g(G))\),即\(\exists S\in g(G)\)\(\text{s.t.} u\in S,v\not\in S\)。由于\((u,v)\in E)\)\(u\in S\),那么\(v\in S\),矛盾。
\(f(g(G))=G\)

根据引理,子集族\(\mathcal{F}\)与传递图\(G=(U,E)\)是一一对应的。(\(\mathcal{F}\)对运算$\cap,\cup \(封闭,\)\empty\in \mathcal{F},U\in \mathcal{F}$)

所以可以将对子集族的计数,转为对传递图的计数。
这里是钦定了包含\(\empty ,U\),故在实际计算的时候,需要枚举\(S,T(S\subseteq T)\)作为边界。

对于\(S=\empty,|T|=i\),分别算出来,题面中的\(n=0\)的方案数,为\(\{1,4,29,355,6942,209527,9535241\}\)。(如果有多项式复杂度计算这个,请告诉我,十分感谢!)

然后按边,不断构成一个团的方式加,感性理解这样会更快。
复杂度\(O(能过)\)

I

题意:
给定一个\(n\)阶排列\(\{a_i\}\),对于每个位置\(i\),输出有多少个位置\(j(j\neq i)\),使得删除\(j\)后,包含\(i\)\(\text{LIS}\)(最长上升子序列)减小。
\(n\le 2.5e5\)

定义1:令\(f_i\)为以位置\(i\)结尾的最长\(\text{LIS}\)长度。
定义2:令\(S_l=\{i:f_i=l\}\)

观察1:对于任意\(l\)\(S_l\)\(a\)单调递减。形式化的,\(\forall i,j\in S_l(i< j)\),有\(a_i>a_j\)

构造有向图:若\(f_i\)的dp转移,\(j\)能转移到\(i\)\(j< i\)),则\((j,i)\in E\)

答案就是正反都建个支配树,然后深度之和。

定义3:对于任意\(l\)\(S_l\)的区间指将元素离散化后的区间。

观察2:对于任意\(l\)\(i\in S_l\)\(S_{l-1}\)内向\(i\)连边的位置,为一个区间。且对于所有\(i\in S_l\),随\(i\)增大,区间的左右端点均不减。

考虑\(\text{DAG}\)建支配树,是求入边端点的\(\text{lca}\)

引理:对于任意\(l\)\(S_l\)内区间的\(\text{lca}\)为区间的两端点的\(\text{lca}\)

\(l\)归纳,容易证明。

J

题意:
\(\text{(n-1)-n}\)二分图,\(m\)条边,边流量为\(\infty\),源点向左侧\(n-1\)个点流\(n\),右侧\(n\)个点向汇点流\((n-1)\),求最大流是否为\(n(n-1)\),且输出\(m\)条边的方案。
\(n\le 1e5,m\le 2e5\)

\(\text{agc29f}\),先构造出一棵树,然后由叶子至根构造。

posted @ 2021-05-08 21:09  Grice  阅读(318)  评论(0编辑  收藏  举报