首页 > 其他分享 >[二分图] 学习笔记

[二分图] 学习笔记

时间:2023-08-15 11:58:12浏览次数:33  
标签:二分 return int top 笔记 学习 color add false

定义

无向图可以分成两个点集,集合内的点不相连通,不允许存在奇环

// 二分图的判定 
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10, M = 2e6 + 10;
struct
{
	int to, next;
}e[M];
int top, h[N], color[N], n, m;

void add(int x, int y)
{
	e[++top] = {y, h[x]};
	h[x] = top;
}

bool dfs(int x, int c)
{
	color[x] = c;
	for (int i = h[x]; i ; i = e[i].next)
	{
		int y = e[i].to;
		if (!color[y])
		{
			if (dfs(y, (c == 1 ? 2 : 1))) return true;
		}
		else if (color[y] == c) return true;
	}
	return false;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	cin >> n >> m;
	for (int i = 1; i <= m; i ++)
	{
		int x, y;
		cin >> x >> y;
		add(x, y);
		add(y, x);
	}
	bool flag = false;
	for (int i = 1; i <= n; i ++)
	{
		if (!color[i])
			if (dfs(i, 1))
			{
				flag = true;
				break;
			}		
	}
	cout << (flag ? "No" : "Yes");
	
	return 0;
}

运用

题单

二分图染色

P1330 封锁阳光大学

可以把这题抽象为:给出一些初始为白色的点和一些连边,现要把一些点染成黑色,使白点和黑点都不会相邻,求最小染色数。

考虑不成立时,肯定出现奇环,跑二分图的判定即可。

考虑成立时,对于图中的每个子二分图,染色后分成两个黑白点集;

根据判定,手模一下易发现,每个子二分图的最小染色数就是取黑白点的更小值。

\(O(n+m)~\) down.

#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10, M = 2e5 + 10;
struct
{
	int to, next;
}e[M];
int top, h[N], color[N], n, m;

void add(int x, int y)
{
	e[++top] = {y, h[x]};
	h[x] = top;
}

bool dfs(int x, int c, int & wh, int  & bl)
{
	color[x] = c;
	if (c == 1) wh ++;
	else bl ++;
	for (int i = h[x]; i ; i = e[i].next)
	{
		int y = e[i].to;
		if (!color[y])
		{
			if (dfs(y, (c == 1 ? 2 : 1), wh, bl)) return true;
		}
		else if (color[y] == c) return true;
	}
	return false;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	cin >> n >> m;
	for (int i = 1; i <= m; i ++)
	{
		int x, y;
		cin >> x >> y;
		add(x, y);
		add(y, x);
	}
	bool flag = false;
	int ans = 0;
	for (int i = 1; i <= n; i ++)
	{
		if (!color[i])
		{
			int white = 0, black = 0;
			if (dfs(i, 1, white, black))
			{
				flag = true;
				break;
			}
			else
				ans += min(white, black);
//			printf ("i = %d white = %d black = %d\n", i, white, black);	
		}
	}
	if (flag) cout << "Impossible";
	else cout << ans;
	
	return 0;
}

标签:二分,return,int,top,笔记,学习,color,add,false
From: https://www.cnblogs.com/hi-zwjoey/p/17630956.html

相关文章

  • 【学习笔记】博弈论基础
    博弈论基础这里主要讨论两人博弈的博弈,不讨论前沿的多人博弈。点击查看目录目录前置知识:nim游戏:杂题乱写(?)[ARC131C]ZeroXOR解题:前置知识:注意,无特殊说明,所有博弈论的题目均已双方会选择最优方案的前提下进行。(所以据说我们\(K8He\)老师想要出一个概率出错的博弈论(平......
  • esXGray开发笔记:基于直线检测的文本倾斜自动校正算法实现(python+opencv)
    昨日采用最小面积矩形的方式实现文本倾斜自动校正,但后面的角度有点麻烦,于是改用基本直线检测的算法。算法简介:检测直线,自动调节参数,至少获取11条直线(直线条数调节)计算每条直线与x轴夹角从返回的角度中找到出现次数较多的直线角度平均值并返回作为图片倾斜角度检测到角度后,就......
  • 【Unity开发】Unity 学习网址 资源 收藏整理大全
    Unity相关网站整理大全众所周知,工欲善其事必先利其器,有一个好的工具可以让我们事半功倍,有一个好用的网站更是如此!但是好用的网站真的太多了,收藏夹都满满的(但是几乎没打开用过......
  • c语言精通学习「2」: 位操作
     1.位操作符包括  &0&0=00&1=01&1=1特定位清零如11010101&11100111=11000101|0|0=0  1|0=1  1|1=1特定位置一~~0=1~1=0逻辑取反是!,真变成加、假变成真^ 1^1=00^0=11^0=0特定位取反<<>> 左移或......
  • salesforce零基础学习(一百三十)Report 学习进阶篇
    本篇参考:https://help.salesforce.com/s/articleView?id=sf.reports_summary_functions_about.htm&type=5https://www.youtube.com/watch?v=bjgZTgYe_84在SalesforceAdmin篇(二)Report中,我们讲过report的一些基础知识,实际工作中往往有些场景比这些复杂很多,接下来根据实际工作......
  • 【免费分享 图书】《阿里云天池大赛赛题解析——深度学习篇》-PDF电子书-百度云
    找这本书的资源简直要把我找吐了,各种网站压缩包一下下来就开始各种套路(比如要你充钱)为了防止还有我这样的受害者,这就把找到的PDF给大家分享一下。链接在文章最后如果这篇文章能够帮到您,麻烦帮我点个赞,并关注一下我,我将有更多动力,持续分享更多有用图书给您!非常感谢,不胜感激!(点......
  • 学习笔记——博弈论
    博弈论中玩家的选择均为对自己最有利の理论最优解.文中提到的必胜状态和必败状态来自要求的游戏起始状态,但不由其推得.这句话可能有些抽象,我也不太会表达(重度社恐),所以举个例子:\(nim\)游戏,3堆石子,分别为1,2,3.最暴力的解法,我们枚举所有可能的状态,然后把他们构成一......
  • 『学习笔记』欧拉函数、莫比乌斯函数、高位前缀和、狄利克雷前后缀和
    欧拉函数定义又叫做\(\varphi\)函数,\(\varphi(x)\)用来描述不大于\(x\)且与\(x\)互素的数的个数。性质满足一切积性函数的性质。若\(a\botb\),则\(f(a\timesb)=f(a)\timesf(b)\).能用线性筛或埃氏筛求出。\(\text{from}\1\\text{to}\n\)中与......
  • Stable Diffusion学习笔记
    一、使用讯飞星火大模型生成StableDiffusionprompt(提示词)#StableDiffusionprompt助理你来充当一位有艺术气息的StableDiffusionprompt助理。##任务我用自然语言告诉你要生成的prompt的主题,你的任务是根据这个主题想象一幅完整的画面,然后转化成一份详细的、高......
  • 【笔者感悟】笔者的学习感悟【八】
    写在前面  今天笔者其实并不是因为某件事情而写这篇博客,今天更多的是对前面一系列经验之谈的总结。在这里也给大家打个预防针,笔者毕竟不是什么大牛,也要和大家一起成长,而且写这个也不是在写书,笔者每一次感悟相当于脑中的一次开会,所以有些问题一直会反复拿出来强调,整体体系上会有......