2.26 比赛

C 题出题人 /qd

A

Subtask 1(25pts)

考虑两个集合 \(S_1,S_2\) 的 ∪ 是 \(S_1 | S_2\)

对于一共 \(2^4=16\) 个集合枚举是红色或蓝色即可。

时间复杂度 \(\mathcal O(2^{2^n})\)

Subtask 2,3(50pts-75pts)

\(dp_{S,0/1}\) 表示只考虑集合 \(S\) 的所有子集,且 \(S\) 的颜色是红/蓝的最小代价

\(S\) 的颜色是红色,考虑所有蓝色子集的并 \(T\),有 \(T\) 一定是蓝色的,任意一个包含 \(S-T\) 的元素都是红色的。

\[dp_{S,0}=\min_{T \subset S} \{dp_{T,1}+\text{sum}(S,T,0)\} \]

这样的时间复杂度是 \(\mathcal O(3^n)\) 的。

Subtask 4(100pts)

\(S\) 一定存在一个元素 \(x\),使得所有包含 \(x\) 的子集都是红色的。证明是简单的,如果不存在这样的元素,则蓝色子集的并一定会得到 \(s\),矛盾。

枚举 \(x\),计算包含 \(x\) 的集合的贡献之后把 \(x\) 删去。

\[dp_{S,0}=\min_{x\in S}\{dp_{S-x}+sum'(S,x,0/1)\} \]

复杂度 \(O(n2^n)\)

B

Subtask 1(5pts)

枚举每一条边在内向生成树、外向生成树还是都不在。

神秘复杂度。反正能过。

Subtask 2(25pts)

首先考虑对于这个 DAG,怎么求生成树个数。

每个点都恰好选择一条连向它的边,所以计数就是

\[\prod^n_{i=2} d_{in}[i] \]

内向生成树也有类似的做法。

考虑如果不要求两棵树没有重边,这很好算,把内向生成树和外向生成树分别的计数乘起来即可。

答案可以用容斥计算,钦定重边集 \(S\),答案就变成了

\[\sum_{S\subseteq E} (-1)^{|E|} f(S) \]

\(f(S)\) 表示两树都包含 \(S\),且不考虑重边的方案数。

\[f(S)=(\prod^n_{i=2}d_{in}[i])(\prod^{n-1}_{i=1}d_{out}[i])(\prod_{e\in S} \frac 1{ {d_{out}[e_{in}]}d_{in}[e_{out}]}) \]

把容斥系数都可以乘进去。时间复杂度 \(\mathcal O(2^n)\)

Subtask 3,4,5(45pts)

四次方到平方做法。

我们发现其实状压 dp 不够优秀,没有利用到边不交叉的性质,于是可以用区间 dp。

\(f_{i,j}\) 表示区间 \([i,j]\) 的答案,\(g_{i,j}\) 表示 \([i,j]\) 但是去除所有 \(i\to j\) 边的答案。

Subtask 6(100pts)

\(f_{i,0/1,0/1}\) 表示对于第 \(i\) 条边 \((x_i,y_i)\),假设 \([x_i,y_i]\) 内的边就处理完了。可以用树形 dp 维护答案。 \(\mathcal O(n)\)

C

不是你题解写网络流做法,然后实际有贪心做法???

出题人/qd

Subtask 1 (10pts)

枚举每个人会哪些题然后判断即可。\(\mathcal O(2^{nm})\)

Subtask 2

posted @ 2024-02-29 15:01  wtcqwq  阅读(7)  评论(0)    收藏  举报