联考 Round 1

联考 Round 1

A

场切题,把部分分全打完,发现是脑残题,消愁了。

算法 1

期望得分:\(30pts\)

把每个点分别删去,看剩下的图是不是棵树。

算法 2

期望得分:\(20pts\),结合算法 1 可以得到 \(50pts\)

输出所有度数为 \(1\) 的点。

算法 3

期望得分:\(20pts\),结合算法 1,2 可以得到 \(70pts\)

显然原图是一个基环树,画一棵线段树,显然你选的这条边删去后必然达成了“破环”的效果。

所以,你必然要选择环上的一个点。然后因为最后是棵树,所以你要选度数为 \(2\) 的点。

瓶颈在 dfs 找环,时间复杂度 \(\mathcal O(n)\)

算法 4

期望得分:\(100pts\)

最后删完的图必然有 \(n-2\) 条边,所以必然要删去 \(m-(n-2)\) 条边。也就是这个点的度数是 \(m-n+2\)

然后因为是棵树,所以必然联通,这个点还必须不是割点。

因而,只需求出度数是 \(m-n+2\) 且不是割点的点即可。用 Tarjan 实现,时间复杂度 \(\mathcal O(n+m)\)

B

算法 1

期望得分:\(35pts\)

显然你发现,对于每头牛,你希望他的深度越小越好。所以我们希望在有牛的情况下,每条边都被占满。然后时间轴具有交换律,也就是说,你可以假设 \(t\) 的时间同时进行,或者说把每条边的容量都 \(\times t\)

所以考虑一种给定了 \(t\) 以后的树形 dp。

对于 \(dp_u=c_u+\sum_{v\in son_u} \min(dp_v,m_v\times t)\)

时间复杂度 \(O(qn)\)

算法 2

期望得分:\(100pts\)

考虑 \(g_u=m_u-\sum_{v\in son_u} m_v\)

发现,在所有 \(g_i>0\) 的点中,\(\lfloor \frac {c_i} {g_i} \rfloor\) 最小的点 \(i\) 一定先把牛送完。牛送完之后把点 \(i\) 用并查集合并到点 \(f_u\) 上,用并查集维护合并的过程即可。

用堆维护所有 \(g_i>0\) 的点的 \(\lfloor \frac{c_i}{g_i} \rfloor\) ,把询问排序,处理 \(<t\) 的时刻的合并,合并后的 \(c_1-g_1\times t\) 就是答案。

C

算法 1

期望得分:\(36pts\)
\(dp_{i}\) 表示前 \(i\) 个数的分组方案树。
转移方程为:

\[dp_i=\sum_{i-a_i<j<i \bigwedge \min \{ a_{j+1},a_{j+2},\cdots,a_i \} \le j-i \le \max{\{a_{j+1},a_{j+2},\cdots,a_i\}}} dp_j \]

算法 2

期望得分:\(16pts\),结合算法 1 可以得到 \(52pts\)

设两种不同的 \(a_i\) 分别记为 \(p,q(p<q)\)

预处理距离 \(i\) 最近的 \(j\) 满足 \(a_j \neq a_{j+1}\)

也就是对于 \([a_{j},i]\) 包含了所有的两种 \(p,q\),然后同时还要满足 \(p\le i-j+1\leq q\)

所以对于 \(a_i\),会对他产生贡献的 \(j\) 一定在 \([1,j] \cap [i-q+1,i-p+1]\),这显然是一个连续段,可以通过树状数组维护。

注意一个特例:在 \([j+1,i]\) 这一段,全部都是 \(p'\)\(j+1\le i-p'+1\le i\),则 \(dp_i\) 还要额外加上 \(dp_{i-p'+1}\)

算法 3

期望得分:\(16pts\),结合算法 1,2 可以得到 \(68pts\)

因为没有上限,\(len\) 在增长的同时,\(\min{a_i}\) 只会越来越小,满足条件的 \(j\) 必然构成一个 \([1,r]\) 的区间。

所以,二分出这个 \(r\),然后用树状数组维护即可。时间复杂度 \(O(n\log n)\)

算法 4

别急让我找 jzy 学学。

D

算法 1

期望得分 \(65\) 分。

显然当前的坐标和学会的方言一定都是连续的区间,因为想要走到区间外的某个村庄时,走回去找那位老者学习就行了。

记一下当前的坐标和方言区间,随便 DP 一下就是 \(O(n^4)\) 或者 \(O(n^3)\) 的了。

posted @ 2024-03-16 10:10  wtcqwq  阅读(14)  评论(0)    收藏  举报