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\) 的元素都是红色的。
这样的时间复杂度是 \(\mathcal O(3^n)\) 的。
Subtask 4(100pts)
\(S\) 一定存在一个元素 \(x\),使得所有包含 \(x\) 的子集都是红色的。证明是简单的,如果不存在这样的元素,则蓝色子集的并一定会得到 \(s\),矛盾。
枚举 \(x\),计算包含 \(x\) 的集合的贡献之后把 \(x\) 删去。
复杂度 \(O(n2^n)\)。
B
Subtask 1(5pts)
枚举每一条边在内向生成树、外向生成树还是都不在。
神秘复杂度。反正能过。
Subtask 2(25pts)
首先考虑对于这个 DAG,怎么求生成树个数。
每个点都恰好选择一条连向它的边,所以计数就是
内向生成树也有类似的做法。
考虑如果不要求两棵树没有重边,这很好算,把内向生成树和外向生成树分别的计数乘起来即可。
答案可以用容斥计算,钦定重边集 \(S\),答案就变成了
\(f(S)\) 表示两树都包含 \(S\),且不考虑重边的方案数。
把容斥系数都可以乘进去。时间复杂度 \(\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})\)。

浙公网安备 33010602011771号