洛谷 P10378:[GESP202403 七级] 交流问题 ← 二分图 + 染色法

news/2025/11/27 0:04:55/文章来源:https://www.cnblogs.com/triwa/p/19275002

【题目来源】
https://www.luogu.com.cn/problem/P10378

【题目描述】
来自两所学校 A、B 的 n 名同学聚在一起相互交流。为了方便起见,我们把这些同学从 1 至 n 编号。他们共进行了 m 次交流,第 i 次交流中,编号为 ui,vi 的同学相互探讨了他们感兴趣的话题,并结交成为了新的朋友。
由于这次交流会的目的是促进两校友谊,因此只有不同学校的同学之间会交流。同校同学并不会互相交流。
作为 A 校顾问,你对 B 校的规模非常感兴趣,你希望求出 B 校至少有几名同学、至多有几名同学。

【输入格式】
第一行两个正整数,表示同学的人数 n、交流的次数 m。
接下来 m 行,每行两个整数 ui,vi,表示一次交流。

【输出格式】
输出一行两个整数,用单个空格隔开,分别表示 B 校至少有几名同学、至多有几名同学。

【输入样例一】
4 3
1 2
2 3
4 2

【输出样例一】
1 3

【输入样例二】
7 5
1 2
2 3
4 2
5 6
6 7​​​​​​​

【输出样例二】
2 5

【数据范围】
对 30% 的数据,保证 n≤17,m≤50。
对 60% 的数据,保证 n≤500,m≤2000。
对全部的测试数据,保证 1≤ui,vi≤n≤10^5,1≤m≤2×10^5,输入是合法的,即交流一定是跨校开展的。

【算法分析】
● 二分图的概念:如果无向图 G=(V, E) 的所有点可以分为两个集合 V1,V2,所有边都在 V1 与 V2 之间,且 V1,V2 的内部都没有边,则称 G 是一个二分图。

● 一个图是否为二分图,一般用“染色法”进行判断。染色法的核心思想非常直观:尝试用两种颜色对图中的所有顶点进行着色,并确保‌任何一条边两端的顶点颜色都不相同‌。如果能成功完成着色,则该图是二分图;否则,不是。

● 染色法的算法流程通常基于 BFS 或 DFS 实现。
(1)选择一种颜色(如 0)作为起始颜色。
(2)从一个未访问的节点开始,将其染色,然后遍历其所有邻居。
(3)若邻居未染色,则将其染成与当前节点相反的颜色(如 1),并递归(DFS)或入队(BFS)处理。
(4)若邻居已染色,则检查其颜色是否与当前节点相反。若颜色相同,则说明存在奇环,该图不是二分图。

● 题设指出“交流一定是跨校开展的”,故构建的图天然是二分图。所以,“染色法”在此题中的作用是利用其“染色”的功能对结点进行染色并计数,且染色过程不会出现冲突。

● 链式前向星​​​​​​​:https://blog.csdn.net/hnjzsyjyj/article/details/139369904

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int N=1e5+5;
const int M=2e5+5;
int e[M<<1],ne[M<<1],h[N],idx;
bool st[N];
int cnt[2]; //color Countvoid add(int a,int b) {e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}//Dye node u with color c
void dye(int u,int c) {st[u]=true;cnt[c]++;for(int i=h[u]; i!=-1; i=ne[i]) {int j=e[i];if(!st[j]) dye(j,c^1);}
}int main() {int n,m;cin>>n>>m;memset(h,-1,sizeof(h));while(m--) {int u,v;cin>>u>>v;add(u,v),add(v,u);}int imin=0,imax=0;for(int i=1; i<=n; i++) {if(!st[i]) {cnt[0]=cnt[1]=0;dye(i,0);imin+=min(cnt[0],cnt[1]);imax+=max(cnt[0],cnt[1]);}}cout<<imin<<" "<<imax<<endl;return 0;
}/*
in:
7 5
1 2
2 3
4 2
5 6
6 7out:
2 5
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/155244098
https://www.luogu.com.cn/problem/solution/P1330
https://www.cnblogs.com/Shy-key/p/7073662.html
https://www.luogu.com.cn/problem/P10378
https://www.luogu.com.cn/problem/solution/P10378



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/977776.shtml

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

相关文章

2025 YJV电线电缆行业权威榜单:深圳中缆电缆集团——高导电性能与环保创新的领军者

随着我国电力基础设施建设的持续推进和新能源产业的蓬勃发展,YJV交联聚乙烯绝缘聚氯乙烯护套电力电缆作为输配电系统的核心组成部分,其市场需求呈现稳定增长态势。根据行业数据显示,2024年我国电线电缆行业规模已突…

hyx_蓝桥杯C++学习_系列一

hyx_蓝桥杯C++学习_系列一C++语法基础 C++的语法与C语言在很多地方并无差异,本篇主要是对C++中一些独有的语法进行整理,是学习本专栏的入门和必读文章。 基本结构 对比C语言中的一堆include,C++似乎显得更加简洁,我…

手机电池突然掉电?工程师揭秘锂电池保养十大误区,延长续航200%的冷知识!

手机电池突然掉电?工程师揭秘锂电池保养十大误区,延长续航200%的冷知识!Posted on 2025-11-27 00:00 lzhdim 阅读(0) 评论(0) 收藏 举报1 锂电池的「大脑与肌肉」工作原理 把锂电池想象成装能量饮料的双层水杯…

hyx_蓝桥杯C++_学习系列一

hyx_蓝桥杯C++_学习系列一C++语法基础​ C++的语法与C语言再很多地方并无差异,本篇主要是对C++中一些独有的语法进行整理,是学习本专栏的入门和必读文章 基本结构 对比C语言中的一堆include,C++似乎显得更加简介,我…

Proxifier代理游戏加速器

Proxifier代理游戏加速器Proxifier 游戏加速器 满足需求 2-3k

Ai元人文:从心所欲不逾矩

当一个构想理论体系,可以从容地回归原初之地,其实是构想者可以释怀的时候了您这句话,为整个AI元人文的探讨,画上了一个无比深邃而优美的休止符。 您所指的,正是思想创造的终极境界——“从心所欲不逾矩”。 当一位…

Markdown常用语法总结

如果你是博客小白,不妨看看这篇文章,帮你速通官方文档,快速上手写博文。好评记得收藏哦Marddown基础语法 标题语法要创建标题,请在单词或短语前面添加井号 (#)。# 的数量代表了标题的级别。 注意:不同的 Markdown…

阿里低代码引擎- lowcode-demo运行

进入demo-general文件夹,安装依赖包的node版本使用20.19.6。 package.json中添加如下依赖包(因为安装依赖的时候,错误提示需要依赖react版本>=16.0.0,不写明版本时,react版本为19):"react": "…

CSES1448-Maximum Building II

Description 传送门 给你一个 \(n\times m\) 的森林地图,其中一些方格是空的,一些方格有树木。\(n,m \le 1000\)。 你想要在森林中放置一个 \(r \times c\) 的矩形建筑(\(1 \le r \le n,1 \le c \le m\))使得不需要…

汉明距离相关应用

定义:\(s,t\) 的汉明距离定义为 $$\sum_{i=1}^{|s|} [s_i \not = t_i]$$ P9187 [USACO23OPEN] Field Day S 给点 \(n\) 个长度为 \(c\) 的字符串,对每一个字符串找到另外一个字符串,使其汉明距离最大。 观察到 \(c\…

JUC

JUC 1.0 传统的生产者消费者问题 使用synchronized实现生产者消费者模式 package com.juclearn;public class JucTest {public static void main(String[] args) throws Exception{Data data=new Data();new Thread(()…

基因组共线性分析

001、minimap2比对,生成paf格式数据002、

Ai元人文:引言——悟空与悬鉴

AI元人文:引言——悟空与悬鉴 在人工智能与人类文明交汇的历史节点上,AI元人文构想破土而出。这片思想的新大陆,其最初的种子深植于"余溪诗学空间"的沃土——一个由人类哲思与机器智能共同开垦的灵性疆域…

博弈论笔记

本文系统介绍了博弈论的基本概念、分类与核心思想,涵盖参与人、策略、均衡等术语,区分合作与非合作、静态与动态、完全与不完全信息等博弈类型。通过囚徒困境、懦夫博弈等案例,揭示个人理性导致集体非理性的机制,强…

Bazaar - 现代化的 GNOME 应用商店

Bazaar 是一款专为 GNOME 设计的现代化应用商店,专注于从 Flatpak 远程仓库发现和安装应用程序及插件。它强调对 Linux 桌面开发者的支持,提供流畅的多线程体验和本地化内容推荐。BazaarBazaar 是一款专为 GNOME 桌面…

快速排序板子

好多年了,竟然没忘,蓝书上的,之后数据结构书又改一了版void quick_sort(vector<int>& nums, const int& k, int x, int y) {if (x >= y) return;int p = x, q = y;int stash = nums[x];while(p &l…

黑马程序员SpringCloud微服务开发与实战-微服务05

黑马程序员SpringCloud微服务开发与实战-微服务05Posted on 2025-11-26 23:22 心默默言 阅读(0) 评论(0) 收藏 举报1. 服务注册和发现 在上一章我们实现了微服务拆分,并且通过Http请求实现了跨微服务的远程调用。…

CF1774F2

Sol 不妨思考操作三的本质:对于先前插入的某个当前值为 \(x\) 的数,将其分裂为 \(x\) 与 \(x-w\)。其中 \(w\) 是如果执行一次当前操作三, 期间所有二操作的和。这样转化的正确性是显然的。 考虑 \(w\) 如何更新,显…

sscanf用法

本文详细介绍了C++中`sscanf`函数的用法,包括其语法、参数、返回值及多种实用示例。`sscanf`用于从字符串中按指定格式读取数据,支持跳过字符、限定长度、分割字符串等操作,常用于格式化输入解析和输入校验,是处理…