当前位置: 首页 > news >正文

洛谷P11022 「LAOI-6」Yet Another Graph Coloration Problem 题解 边双连通分量

题目链接:https://www.luogu.com.cn/problem/P11022

解题思路:

一个可以 AC 的策略:

首先,如果图不连通,则无解。

  • 因为此时肯定得有一个连通块中有白点,同时另一个连通块有黑点,它们之间无法到达。

其次,如果所有的边双连通分量的大小均为 \(1\),则无解(后来我们先,因为 \(n \ge 2\),所以如果图连通的情况下,这种情况其实不会出现、)。

  • 因为此时(这个图是一棵树或森林)任意两点之间要么不连通,要么只有一条简单路径,所以颜色必须相同。

其次,如果图连通且存在一个大小大于 \(1\) 的边双连通分量。则:

我们只需要在这个大小 \(\gt 1\) 的边双连通分量重任选一个不与任何桥相邻的点 \(x\) 染成黑色即可,该双连通分量重的其他点染成白色,然后:

将所有 \(x\) 和同一个连通分量中的点连接的边都删掉,变量两个连通块。

  • \(x\) 所在的连通块都染成黑色;
  • 另一个连通块都染成白色。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;int T, n, m, dfn[maxn], low[maxn], ts, bl[maxn], dcc, x, sz[maxn]; // x表示要染成黑色的那个点
bool vis[maxn];
vector<int> g[maxn];
stack<int> stk;
char color[maxn];void init() {for (int i = 1; i <= n; i++) {g[i].clear();dfn[i] = low[i] = sz[i] = 0;vis[i] = false;}ts = dcc = x = 0;while (!stk.empty())stk.pop();fill(color, color+n+1, 'W');color[n+1] = 0;
}void tarjan(int u, int p) {dfn[u] = low[u] = ++ts;stk.push(u);for (auto v : g[u]) {if (v == p) continue;if (!dfn[v]) {tarjan(v, u);low[u] = min(low[u], low[v]);}else low[u] = min(low[u], dfn[v]);}if (low[u] == dfn[u]) {dcc++;int v;do {v = stk.top();stk.pop();bl[v] = dcc;sz[dcc]++;} while (u != v);}
}void dfs(int u) {if (vis[u]) return;vis[u] = true;color[u] = 'B';for (auto v : g[u])dfs(v);
}void cal() {tarjan(1, -1);if (ts < n) { // 图不连通puts("-1");return;}for (int i = 1; i <= dcc; i++) {if (sz[i] > 1) {for (int j = 1; j <= n; j++) {if (bl[j] == i) {if (!x) x = j;else vis[j] = true;}}break;}}if (!x) {puts("-1");return;}dfs(x);puts(color+1);
}int main() {scanf("%d", &T);while (T--) {scanf("%d%d", &n, &m);init();for (int i = 0, u, v; i < m; i++) {scanf("%d%d", &u, &v);g[u].push_back(v);g[v].push_back(u);}cal();}return 0;
}
http://www.gsyq.cn/news/80237.html

相关文章:

  • DevEco Studio签名认证与上传应用
  • 备忘录模式
  • 终端 MQTT 通信开发规范
  • 每日3题 4(咕咕咕
  • 洛谷U640022 找割点 题解 点双连通分量
  • Alientech KESS3 Master: Efficient OBD Protocols Activation for Agri Trucks Buses
  • 内网环境-centos7.6配置chrom和flask项目
  • selenium其他重要的Api
  • # sg.计算器
  • 2025最新PC仿石砖增强剂品牌TOP5评测!绿色建材赋能市政工程,权威榜单发布 - 全局中转站
  • 2025最新聚脲防腐防水涂料/厂家TOP5评测!环保科技+工程实证权威榜单发布,功能涂料赋能基建防护新生态 - 全局中转站
  • 2025最新彩砖专用水性色浆服务商/厂家TOP5评测!环保创新+性能实证权威榜单发布,技术赋能重构彩砖涂装生态 - 全局中转站
  • 剪映vip破解版 分享
  • 2025 最新聚脲地坪服务商 / 厂家 TOP5 评测!环保高性能 + 全场景适配权威榜单发布,技术创新引领地坪材料升级 - 全局中转站
  • 一只菜鸟学深度学习的日记:填充 步幅 下采样
  • 51
  • 数据采集与融合技术实践4
  • 12月9日日记
  • 2025.12.9总结
  • 2025 最新桥梁防腐涂料厂家 TOP5 评测!环保高性能 + 技术创新权威榜单发布,守护基础设施安全与耐久 - 全局中转站
  • 12/9
  • Nginx日志切割
  • 6502 算术逻辑单元(ALU)
  • make出错立即终止
  • Testing Reprised之关于基米
  • OTOFIX IM2 1-Year Update Subscription: Ensure Latest Vehicle Diagnostics for European/American Cars
  • 2025最新水洗石抗污剂厂家TOP5评测!环保性能与抗污效果品牌双权威榜单发布,技术赋能重构景观防护生态 - 全局中转站
  • 我的 OI 生涯(更新中)
  • 为AI时代蓄力:除了几大热门,还有哪些值得关注的少儿编程选择? - 品牌测评鉴赏家
  • diff的安装与使用