news 2026/7/17 20:06:15

题解:洛谷 P17014 [GESP202606 七级] 染色

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
题解:洛谷 P17014 [GESP202606 七级] 染色

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

洛谷:P17014 [GESP202606 七级] 染色 - 洛谷

【题目描述】

小杨同学有一张包含n nn个结点的无向图G GG,G GG中的结点依次以1 , 2 , … , n 1, 2, \dots, n1,2,,n编号。

小杨同学发现G GG中每个结点的度数都是2 22。显然G GG中恰好有n nn条边。

小杨同学想为G GG中的结点染色,使得任意一条边两端的结点都有不同的颜色。

小杨同学想知道最少需要多少种颜色才能在满足条件的前提下为G GG染色。

【输入】

本题包含多组数据。

第一行,一个正整数t tt,表示数据组数。

对于每组数据:

第一行,一个正整数n nn,表示无向图G GG中的结点数。

接下来n nn行,每行两个正整数u i , v i u_i, v_iui,vi,表示一条连接结点u i u_iuiv i v_ivi的无向边,整数之间以空格分隔。

保证G GG中没有重边与自环。

【输出】

对于每组数据:输出一行,一个整数,表示在满足条件的前提下为G GG染色需要的最少颜色数。

【输入样例】

4 6 1 6 2 1 3 2 4 3 5 4 6 5 6 1 3 3 5 5 1 2 4 4 6 6 2 3 1 2 2 3 3 1 5 1 4 2 5 3 1 4 2 5 3

【输出样例】

2 3 3 3

【核心思想】

  1. 问题分析:给定一个每个结点度数均为2 22的无向图G GG,即G GG由若干个不相交的环组成(每个连通块是一个简单环)。要求为结点染色使得相邻结点颜色不同,求最少颜色数。这是一个图论性质分析 + 连通块分类问题,核心在于利用"每个结点度数为2 22"的条件推导出图的结构特征,进而确定每个连通块的色数。

  2. 算法选择

    • 图结构分析:度数为2 22的无向图必然由若干个简单环构成(无重边、无自环保证)
    • 环的色数判定:偶环是二分图,色数为2 22;奇环不是二分图,色数为3 33
    • 深度优先搜索(DFS):统计每个连通块的结点数,判断奇偶性
  3. 关键步骤

    • 建图:读入n nn条边,建立无向图的邻接表
    • 连通块遍历(对每个未访问的结点i ii):
      • c n t ← 0 cnt \leftarrow 0cnt0,启动d f s ( i ) dfs(i)dfs(i)统计连通块大小
      • c n t m o d 2 = 0 cnt \bmod 2 = 0cntmod2=0r e s ← 2 res \leftarrow 2res2(偶环,二分图,2 22色可染)
      • c n t m o d 2 = 1 cnt \bmod 2 = 1cntmod2=1r e s ← 3 res \leftarrow 3res3(奇环,非二分图,需3 33色)
      • a n s ← max ⁡ ( a n s , r e s ) ans \leftarrow \max(ans, res)ansmax(ans,res)
    • 输出结果a n s ansans
  4. 时间/空间复杂度

    • 时间复杂度:O ( t ⋅ ( n + m ) ) = O ( t ⋅ n ) O(t \cdot (n + m)) = O(t \cdot n)O(t(n+m))=O(tn),其中m = n m = nm=n(每个结点度数为2 22),DFS 遍历每个连通块一次
    • 空间复杂度:O ( n ) O(n)O(n),邻接表和访问标记数组
  5. 图论性质分析的核心思想

    • 度数约束推导结构:无向图中所有结点度数为2 22且无重边、无自环,则图必然由若干个不相交的简单环组成。每个连通块是一个环,结点数等于边数
    • 二分图与色数:偶环是二分图,可以用2 22种颜色交替染色;奇环包含奇数长度的回路,不是二分图,根据 Brooks 定理和具体结构分析,需要3 33种颜色
    • 全局最优取最大:整个图的最少颜色数等于所有连通块色数的最大值(各连通块独立染色,颜色可复用)
    • DFS 统计连通块:利用访问标记数组和 DFS 遍历,高效统计每个连通块的结点数,无需显式找环
    • 适用于具有特殊度数约束的图结构分析、连通块分类判定类问题

【算法标签】

#普及 #DFS-图

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=100005;// 常量:最大结点数intt;// t: 数据组数intn;// n: 当前数据的结点数vector<int>g[N];// g[x]: 结点 x 的邻接结点列表boolvis[N];// vis[x]: 标记结点 x 是否已被访问intcnt;// cnt: 当前连通块的结点数voiddfs(intx)// 深度优先搜索,统计连通块大小{vis[x]=true;// 标记当前结点已访问cnt++;// 连通块结点数加一for(inti=0;i<g[x].size();i++)// 遍历所有邻接结点{inty=g[x][i];// y: 邻接结点if(vis[y])// 如果已访问,跳过continue;dfs(y);// 递归搜索}}intmain(){cin>>t;// 读入数据组数while(t--)// 循环处理每组数据{cin>>n;// 读入结点数for(inti=1;i<=n;i++)// 清空邻接表g[i].clear();for(inti=1;i<=n;i++)// 读入 n 条边{intu,v;// u, v: 边的两个端点cin>>u>>v;g[u].push_back(v);// 建立无向图g[v].push_back(u);}memset(vis,0,sizeof(vis));// 清空访问标记intans=-1;// ans: 最少需要的颜色数intres;// res: 当前连通块需要的颜色数for(inti=1;i<=n;i++)// 枚举每个结点,处理所有连通块{cnt=0;// 重置连通块计数器if(!vis[i])// 如果结点 i 未被访问(新的连通块)dfs(i);if(cnt%2==1)// 如果连通块结点数为奇数res=3;// 奇环需要 3 种颜色else// 如果连通块结点数为偶数res=2;// 偶环只需要 2 种颜色ans=max(ans,res);// 取所有连通块颜色数的最大值}cout<<ans<<endl;// 输出最少需要的颜色数}return0;}

【运行结果】

4 6 1 6 2 1 3 2 4 3 5 4 6 5 2 6 1 3 3 5 5 1 2 4 4 6 6 2 3 3 1 2 2 3 3 1 3 5 1 4 2 5 3 1 4 2 5 3 3
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 20:05:08

HarmonyOS7 富文本混排页实战:RichText 与 Span 不只是会用,还要用得顺手

文章目录Span 不是为了把文字做花这个页面拆得比较清楚商品价格是最典型的场景写富文本时要克制完整代码写在最后Span 这个东西很容易被低估。它不像列表、弹窗那样一眼能看出交互价值&#xff0c;但只要页面里有价格、关键词、标签、评论摘要&#xff0c;局部文字样式基本都会…

作者头像 李华
网站建设 2026/7/17 20:03:01

利用radare2开展逆向工程学术研究:从工具使用到科研产出的实践指南

1. 项目概述&#xff1a;当逆向工程遇上学术研究如果你是一名计算机科学、网络安全或软件工程领域的研究生或青年学者&#xff0c;正在为如何将逆向工程这一“硬核”技术转化为高质量的学术成果而发愁&#xff0c;那么这篇文章就是为你准备的。逆向工程&#xff0c;这个听起来充…

作者头像 李华
网站建设 2026/7/17 20:02:04

AntiCAP-WebApi:一站式验证码识别服务部署与API调用实战

1. 项目概述&#xff1a;一个面向开发者的全能验证码识别服务最近在折腾一个自动化项目&#xff0c;需要处理各种五花八门的验证码&#xff0c;从最简单的数字字母OCR&#xff0c;到滑块、点选、旋转拼图&#xff0c;简直让人头大。市面上虽然有一些现成的服务&#xff0c;但要…

作者头像 李华
网站建设 2026/7/17 19:58:28

Office 2019 for Mac 16.80版性能优化与兼容性解析

1. 项目概述&#xff1a;Microsoft Office for Mac 2019 (Office 365) 16.80 Universal作为Mac用户最熟悉的生产力工具之一&#xff0c;Office 2019 for Mac的16.80版本标志着微软在苹果生态下的重要里程碑。这个Universal版本最显著的特点是同时支持Intel和M系列芯片的Mac设备…

作者头像 李华
网站建设 2026/7/17 19:58:17

VMware Fusion Pro 13在Apple Silicon上安装Win11全攻略

1. VMware Fusion Pro 13与Win11系统安装概述 作为Mac用户想要运行Windows应用&#xff0c;虚拟机无疑是最优雅的解决方案。VMware Fusion Pro 13作为当前最新版本&#xff0c;针对Apple Silicon芯片&#xff08;M1/M2/M4&#xff09;进行了深度优化&#xff0c;相比Parallels …

作者头像 李华