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

news/2025/12/10 3:40:46/文章来源:https://www.cnblogs.com/quanjun/p/19328919

题目链接: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.mzph.cn/news/995852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

具身智能:零基础入门睿尔曼机械臂(三)——夹爪抓取与释放控制全解析

@目录一、前言二、睿尔曼机械臂夹爪:抓取作业的核心执行部件1. 全型号适配2. 简洁的参数化控制3. 无额外硬件配置4. 核心功能三、核心例程全解析:逐行吃透夹爪控制逻辑3.1 环境配置与模块导入3.2 核心控制类RobotArm…

具身智能:零基础入门睿尔曼机械臂(一)——从硬件准备到首次运行全攻略

前言 作为刚接触睿尔曼协作机器人的新手,是否对着包装箱里的部件感到无从下手?别担心!这篇入门博客将以官方硬件准备手册为基础,带大家一步步完成机器人的组装、接线、开机与示教器连接,无论是操作人员、技术人员…

DevEco Studio签名认证与上传应用

DevEco Studio签名认证与上传应用 引言 通过本指南,您将彻底搞懂并完成: ​核心概念:理解证书、Profile、密钥之间的关系与作用。 ​文件制备:在 DevEco Studio 中生成密钥和证书请求文件。 ​官方申请:在 AppGal…

洛谷U640030 删除一个点 题解 割点/点双连通分量

题目链接:https://www.luogu.com.cn/problem/U640030 题目大意: 给你一个 \(n\) 个顶点 \(m\) 条边的无向图。顶点编号从 \(1\) 到 \(n\)。 请你求出该图删除一个点之后,连通块最多有多少。 解题思路: 首先,有两个…

终端 MQTT 通信开发规范

终端 MQTT 通信开发规范 一、概述 本文档整合终端与服务端 MQTT 通信全流程规范,涵盖连接配置、认证注册、主题格式、数据上报、指令交互等核心模块,为终端开发提供标准化、可落地的操作指南,确保通信兼容性与安全性…

UEFI 中的杂项知识总结-Protocol Handle 机制的详细介绍 - 阿源

本文介绍了在 UEFI 学习过程中遇到的一些知识集合。总结如下:复位向量ResetVector;不同平台的OS loader/GRUB;UEFI中的ESP目录是什么;以及UEFI中很重要的Protocol Handle机制,非常类似于Linux设备驱动和应用的设计…

状态模式

状态模式:封装状态变化的行为设计艺术 一、状态模式的定义与核心思想 状态模式(State Pattern) 是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其核心思想是 …

每日3题 4(咕咕咕

孩子们事情太多了明天再说

基于事件驱动机制的提醒系统设计方案

基于事件驱动机制的提醒系统设计方案一、系统架构设计 采用 "分层架构 + 事件驱动引擎" 模式,各层级职责与技术选型如下:层级核心职责技术选型前端层用户交互(增删改查提醒)、实时接收提醒、处理确认操作…

docker快速上手

docker快速上手 安装配置# 移除旧版本 sudo dnf remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 配置yum源 sudo …

全球首个液冷迷你机!abee AI Station 395 Max工作站图赏

全球首个液冷迷你机!abee AI Station 395 Max工作站图赏Posted on 2025-12-10 01:22 lzhdim 阅读(0) 评论(0) 收藏 举报日前,abee AI Station 395 Max迷你液冷AI工作站发布,定价为17999元。 现在这款新品已经来…

Docker环境下Redis ACL实战踩坑记:权限、挂载与用户配置解析

Docker环境下Redis ACL实战踩坑指南:权限、挂载与用户配置解析 开篇:实战场景说明 最近在生产环境中部署Redis时,我们决定升级到Redis 7.0并启用ACL功能,以实现更精细化的权限控制。核心需求很简单:启用ACL功能,…

一例罗技M275鼠标空键程处理

笔者手中有一个罗技M275鼠标,最近发现鼠标空键程现象比较严重,不如手中另一只M215鼠标手感清脆、爽利。因此笔者尝试解决手中鼠标的空键程现象。 首先根据网络上已经提出的解决办法,打开鼠标,在鼠标左键和微动的接…

Alientech KESS V3: Master Bench-Boot Protocols Activation for Agri Trucks Buses

Overcoming Agriculture Truck & Bus Diagnostic Challenges: The Alientech KESS V3 KESS3 Master Solution In the world of agriculture truck and bus maintenance, downtime is a costly enemy. For European…

洛谷U640022 找割点 题解 点双连通分量

题目链接:https://www.luogu.com.cn/problem/U640022根节点要分割出至少 \(2\) 个连通块(因为根节点没有父节点那部分的连通块)。 其它节点只需要分割出至少 \(1\) 个连通块即可。对于一个 当前节点 \(u\),dfs 它的…

Alientech KESS V3 Master OBD Protocol Activation: Bike, ATV, UTV – Boost Repair Diagnostics

Mastering Protocol Activation for Bikes, ATVs, and UTVs: The Alientech KESS V3 Advantage Problem: Activation Challenges with Specialized Vehicles For European and American automotive professionals and …

第50天(中等题 数据结构)

打卡第五十天 2道中等题题目:思路:代码: class Solution { public:int numOfSubarrays(vector<int>& arr) {const int MODULO = 1000000007; int odd = 0, even = 1; // odd: 奇数前缀数量,ev…

Alientech KESS3 Master: Efficient OBD Protocols Activation for Agri Trucks Buses

Diagnosing the Challenges of Agricultural, Truck, and Bus Diagnostics For automotive professionals and owners working with agriculture, trucks, and buses, traditional diagnostic tools often fall short.…

内网环境-centos7.6配置chrom和flask项目

1.离线安装Anaconda, 配置python环境 #ip网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33Linux安装Anaconda教程 2.离线安装chrome 2.1离线安装命令#使用 rpm命令强制安装 --nodeps选项会跳过依赖检查 r…

selenium其他重要的Api

元素等待方法 认识等待 由于⽹络或其他原因,元素未能及时加载出来,⽽代码已执⾏,会触发异常,故要设置等待。代码执⾏过程中,第⼀次未找到元素,先不抛出异常。激活等待时间,在等待过程中如果找到元素就执⾏。 隐…