1 条题解
-
0
自动搬运
来自洛谷,原作者为

Alex_Wei
**搬运于
2025-08-24 22:00:05,当前版本为作者最后更新于2022-07-06 20:14:17,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Upd on 2022.7.7:修正代码,修改笔误。
我花了一个下午和一个晚上研究这道结论题及其证明。现有题解的证明与推导过程太简略,并不严谨,且没能很好地体现本题的思维难度,希望我的题解能帮到大家。
如有笔误或难以理解的部分还请指出。
基本判断
显然,当 不是二分图时无解,图上所有环均为偶环。
设 连通,若 不连通,其每个连通块独立,可分别求解。
度数为 的点不产生贡献,因其可根据唯一邻点的颜色确定自身颜色,不可能无解,故不断剥去度数为 的点,直到图上所有点度数 。
固定
由样例可知若 包含 则无解,但这个条件太强了,不必要。
尝试手玩 ,即长度为 的环 ,目标是确定一些颜色,降低不确定性。
不失一般性,节点 的颜色集合 。注意到 与 相连,若给 涂上颜色 后, 被迫选择 ,令 即可导出矛盾。根据推理,当 ,,, 时,可固定 。
尝试抽象出固定的本质。设节点 及 ,「固定」需要两个「自由点」,使得 取某个颜色时, 不得不取某个 与 不同 的颜色,而 的颜色集与 颜色重合,得到矛盾。
简单环
接下来讨论的环为不经过重复节点的 简单环。
一个环固定环上任意点颜色,只需再用一个环导出矛盾即可。因形如 “只能选两种颜色之一” 的限制可通过度数为 的节点传播,故若 存在两个不交的由一条链连接的环,则无解。
证明:考虑环 及连接它们的路径 ,其中 ,。令 上所有节点颜色集合为 。固定 , 根据 奇偶性固定为 或 容易通过 导出矛盾。证毕。
进一步地,若 存在两个交于一点的环,则无解,此时 退化为单点。例如在上例基础上添加环 ,令 ,, 可固定 ,矛盾。
两个四度点
注意到两个交于一点的环形成度数为 的节点,设两个 的节点 。
若存在 的两条路径 交于 ,则 与 至多交于一点 ,无解。
假设 某四条路径分别长 。
当 为奇数时,因无重边,故 。因形如 “只能选某固定颜色” 的限制可通过度数为 的节点 以 为周期 传播,即讨论无解性时长 的链可归约至长 的链,故只需考虑 。根据固定的本质,读者容易自行构造反例。如果不会,见三度点部分 反例,其强于 。
当 为偶数时,同理只需考虑 的 。令 ,,中间四个点分别为 ,,, 即可。
因此,图上存在至少两个 的节点时,无解。
一个四度点
当图上仅有一个 的节点时,要么存在至少两个 的节点,要么剩余所有节点 。
对于后者,其形态为两个交于一点的环,无解。
对于前者,设两个 的节点 ,同理可证 之间任意路径仅在 处相交,与存在 的节点矛盾。
因此,图上存在至少一个 的节点时,无解。
接下来讨论不存在四度及以上节点的图。
三度点
讨论完四度点,让我们将目光转向三度点。一旦图上存在三度点的情况被讨论清楚,问题就迎刃而解。
考虑图上某两个三度点 ,上文已经说明 之间任意路径仅在 处相交,故图上仅存在两个三度点。
设 三条路径长 ,。
考虑 。
因无重边,故 。如法炮制,根据归约关系考虑 。根据固定的本质,在最开始例子的基础上,添加环 ,令 , 可固定 。无解,称为 反例。
考虑 。
从简单情况入手,考虑 的 。
- 若 ,则令 和 等于它们的交中的某个颜色,则中间三个点因为 ,总可以选择不与该颜色相同的颜色,有解。
- 若 ,则 与 的颜色共有 种不同情况,而每个节点只被唯一情况封锁住,所以至少有一种情况没有封锁住任何节点,有解。
这说明 有解。
进一步地,考虑 。 的讨论给予我们突破点:考虑 的颜色情况数,与夹在中间的节点个数 作比较。若情况数 或 则有解,否则无解。
- 若 对应路径存在相邻两个点的 不同,则当 取两种颜色时,按照环边染色, 分别有两种和至少一种合法选择。
- 若 ,存在三种不同情况,有解。
- 若 ,若 不合法,则剩余三种情况互不相同,有解;否则 合法,有解。
- 若 , 的情况只有两种,必然存在 合法的情况,有解。
- 否则,由于 为偶数,所以 ,有解。
这说明仅有 时仍然有解。
容易发现上述证明并没有用到 的性质,即它可以用于证明 的有解性。但如果不先从 下手,不易想到情况数这一突破点。因此,从简单情况入手 是这种推性质题相当好用的解题技巧。
进一步地,考虑 。由于上文讨论过 无解,不难再此基础上稍作修补,构造出使得 无解的反例。提示:考虑固定的本质, 说明存在两组自由点 ,每组自由点可固定 为某颜色。
综上,我们得到图上存在三度点有解的充要条件:图上仅存在两个三度点,且至少存在两个与两个三度点同时相邻的二度点。
偶环
最后,考虑仅存在二度点的图。因无重边,它是一个长度 的环。
类似地,考虑环上相邻三个节点 并最后考虑 的限制。若 从环的另一侧到 的路径上 相同,则 合法,有解。否则考虑使得 有两种染色方案的 ,无法封锁 ,有解。
结论
对 的每个连通块单独求解,若存在连通块无解则整张图无解。
有解当且仅当其为二分图,且满足以下性质之一:
- 不存在 的点。
- 不存在 的点,且仅存在两个三度点,且至少存在两个与三度点同时相邻的二度点。
容易在 或 的时间进行上述判定。
代码
#include <bits/stdc++.h> using namespace std; bool Mbe; constexpr int N = 1e4 + 5; int n, m, GG, col[N]; set<int> e[N]; vector<int> G; void dfs(int id) { G.push_back(id); for(int it : e[id]) { if(col[it] == -1) col[it] = col[id] ^ 1, dfs(it); else if(col[id] == col[it]) GG = 1; } } void solve() { GG = 0; cin >> n >> m; memset(col, -1, sizeof(col)); for(int i = 1; i <= n; i++) e[i].clear(); for(int i = 1; i <= m; i++) { int u, v; cin >> u >> v; e[u].insert(v), e[v].insert(u); } queue<int> q; for(int i = 1; i <= n; i++) if(e[i].size() == 1) q.push(i); while(!q.empty()) { int t = q.front(); q.pop(); if(e[t].empty()) continue; int it = *e[t].begin(); e[t].clear(), e[it].erase(t); if(e[it].size() == 1) q.push(it); } for(int i = 1; i <= n; i++) if(e[i].size() > 3) return puts("NO"), void(); for(int i = 1; i <= n; i++) { if(col[i] != -1) continue; col[i] = 0, G.clear(), dfs(i); if(GG) return puts("NO"), void(); int u = -1, v = -1; for(int it : G) if(e[it].size() == 3) { if(u == -1) u = it; else if(v == -1) v = it; else return puts("NO"), void(); } if(u != -1) { int cnt = 0, c[3], d[3]; for(int i : {0, 1, 2}) { c[i] = *e[u].begin(), e[u].erase(e[u].begin()); d[i] = *e[v].begin(), e[v].erase(e[v].begin()); } for(int i : {0, 1, 2}) for(int j : {0, 1, 2}) cnt += c[i] == d[j]; if(cnt < 2) return puts("NO"), void(); } } puts("YES"); } bool Med; int main() { fprintf(stderr, "%.4lf\n", (&Mbe - &Med) / 1048576.0); #ifdef ALEX_WEI freopen("1.in", "r", stdin); freopen("1.out", "w", stdout); #endif int T; cin >> T; while(T--) solve(); return cerr << "Time: " << clock() << "\n", 0; } /* 2022/7/6 start thinking at 9:57 首先图必须得是二分图。 再加上不存在 K{3, 3} 是否是充要条件? Try a try, AC is OK. 不是。 冷静分析了一下,可能是 K{2, 3}。 不是。 好像是两个并列简单环。 很神仙的题目,研究了一下午。 start coding at 17:10 finish debugging at 17:18 */
- 1
信息
- ID
- 3401
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者