Loading

模拟赛10.9 解题报告

省选 \(\text{DAY2}\) 模拟赛,没人过题


T1. 徒

题意:给出一张简单无向连通图,求是否存在一个点,以这个点为起点进行 \(\text{DFS}\),每次随便选择一条未走过的边去走,直到无路可走为止,满足无论怎么走总能走过所有的边。

\(1\le n\le 10^5,\space 1\le m\le 2\times 10^5\)


首先排除不存在欧拉路径的图。

然后显然需要大力猜结论。

考场上猜对了结论,但是代码写假了

结论:一个点为合法的起(终)点,当且仅当他被所有简单环覆盖。

证明:如果被所有简单环覆盖,那么这个点无论怎么走显然都不会忽略任何一个环;如果存在一个简单环不覆盖这个点,那么我们完全可以忽略这个环。

判断一个点是否被所有简单环覆盖,可以把不连接这个点的边加进来,然后并查集判断是否存在环。

对于存在两个点度数为奇数的图,我们分别判断这两个点是否合法;

对于度数全为偶数的图,不难发现,起点一定是度数最大的点。

时间复杂度 \(O(n\alpha(n))\)


T2. 灵石

题意:一棵树,有 \(q\) 次更新,每次给出 \(k,a_{1...k}\),然后对于每个点 \(u\),更新他的答案 \(ans[u]\):设 \(dist[u]\) 为其与 \(a_{1...k}\)\(k\) 个点中的最远距离,他的答案 \(ans[u]\leftarrow \min(ans[u],dist[u])\)

\(q\) 次更新后每个点的答案。

\(1\le n,q,\le 3\times10^5,\space \sum k\le 10^6\)


考虑一条链(序列)怎么做。

我们发现,每次更新只有最左边的点和最右边的点有更新贡献。

设这两个点从左到右序号分别为 \(x,y\),令 \(mid=\lfloor \frac {x+y}2 \rfloor\),那么 \(1...mid\)\(y\) 更新,\(mid+1...n\)\(x\) 更新,更新可以用数组保存,最后再求一遍前缀 \(\min\) 和后缀 \(\min\)

对于一棵树:

考虑 \(a_{1...k}\) 内的直径,不难发现,只有直径两端才有更新贡献。

建立虚树求直径,然后从直径中间把树分开贡献。

实现非常麻烦,注意细节和常数,时间复杂度 \(O(q\log n+k)\)


T3. 地雷

题意:\(n\) 个物品,每个物品 \(i\) 有四个属性 \(p_i,q_i,r_i,s_i\)。你需要以某种顺序消去这 \(n\) 个东西,消去一个物品 \(i_1\),设他当前未消去的左边的物品为 \(i_0\),右边的物品为 \(i_2\),右边的右边的物品为 \(i_3\),那么消去 \(i_1\) 的得分为 \((p_{i_0}-q_{i_1})^2+(p_{i_1}-r_{i_2})^2+(p_{i_2}-s_{i_3})^2\)(若不存在相应物品,则属性为 \(0\))。求可能的最大得分。

\(1\le n\le 70,\space |p_i|,|q_i|,|r_i|,|s_i|\le 1000\)

明显区间 \(\text{DP}\)。但是一个物品的得分还与其右边的右边的物品有关,我们需要额外记录这个信息。

\(f[i,j,x,y]\) 表示在 \(i-1,j+1\) 未消去的情况下,消去 \([i,j]\),并且此时 \(j+1\) 右边的是 \(x\),我们要求整个消除的过程中存在某一时刻满足 \(y\) 在第一个位置,的最大得分;设 \(g[i,j,x]=\max\limits_y\{f[i,j,x,y]\}\)

转移时考虑枚举最后一个消去的位置 \(k\),枚举 \([k+1,j]\) 中(或者 \(j+1\))哪个物品会成为消除 \([i,k-1]\) 时“\(k\) 右边的物品”,设为 \(c\)

那么

\[f[i,j,x,y]=\max_k\{\max_c\{ \text{cost}(i-1,k,j+1,x)+f[i,k-1,c,y]+f[k+1,j,x,c]\}\} \]

时间复杂度 \(O(n^6)\),常数极小可过。

posted @ 2023-10-09 16:32  Lgx_Q  阅读(11)  评论(0编辑  收藏  举报