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

二分图/忆re.

rt:
本文分两部分

  1. 二分图
  2. 忆re.

part 1 二分图

定义

我会告诉你我OIwiki没看懂吗?

其实就是有一张图,将它的点分为红点和蓝点,红点只能和蓝点相连,同理蓝点只能和红点相连,满足这个条件的图就是二分图。

形式上的:
image
(还是贺了OIwiki)

判定

(没太用过)
给这张图染色,若直接相连的两个点颜色是相同的,则其不是一个二分图。(即如定义所述)

代码

#include<bits/stdc++.h>
using namespace std;
int color[1010];
int h[1010],to[20010],nxt[20010],tot;
void add(int x,int y)
{tot++;to[tot]=y;nxt[tot]=h[x];h[x]=tot; 
}
bool dfs(int x,int c) 
{color[x] = c; // 给当前节点染色for(int i=h[x];i;i=nxt[i]){int y=to[i];if(color[y]==c) {return false; // 相邻节点颜色相同,不是二分图}if(color[y]==0&&!dfs(y,-c)) {return false; // 未染色,递归染色}}return true;
}
int main() 
{int n,m;cin>>n>>m;memset(color,0,sizeof(color));for(int i=1;i<=m;i++) {int x,y;cin>>x>>y;add(x,y);add(y,x);   }bool is=true;for (int i=1;i<=n;i++) {if(color[i]==0&&!dfs(i,1)) {is=false;break;}}cout<<is<<endl;return 0;
}

二分图最大匹配

定义

二分图匹配的例子是\(p,t\)配对。设有若干\(t\)\(p\),每个只能配对一次,且允许配对的组合已由某个列表限定。此时,二分图最大匹配算法的任务就是在这些限制下,找到最多的配对对数,使尽可能多的成功配对。

匈牙利算法

rt:
我们有这样一张二分图;
image
让第一个红点先匹配:
image
然后匹配第二个红点:
image
发现第三个红点没有可以匹配的了,让一个红点给它让位:
image
最后第四个红点也需要一个红点给他让位:
image

都匹配上了,最大匹配数是\(4\)

例题

洛谷 P3386 【模板】二分图最大匹配

image

代码实现

#include<bits/stdc++.h>
using namespace std;
int match[1010];
bool vis[1010];
int h[1010],to[50010],nxt[50010],tot;
void add(int x,int y)
{tot++;to[tot]=y;nxt[tot]=h[x];h[x]=tot;
}
bool Hungarian(int x)
{for(int i=h[x];i;i=nxt[i]){int y=to[i];if(!vis[y]){vis[y]=1;if(!match[y]||Hungarian(match[y])){match[y]=x;return 1;}}	}	return 0;
} 
int main()
{int n,m,e;cin>>n>>m>>e;for(int i=1;i<=e;i++){int x,y;cin>>x>>y;add(x,y);}int ans=0;for(int i=1;i<=n;i++){memset(vis,false,sizeof(vis));if(Hungarian(i)){ans++;}}cout<<ans;return 0;
} 

二分图最小点覆盖

定义

在一张无向图中选择最少的顶点,满足每条边至少有一个端点被选。

Kőnig 定理

\[最小点覆盖中的顶点数量=最大匹配中的边数量 \]

证明见OIwiki

例题

洛谷 UVA1194 Machine Schedule

image

实现

还是匈牙利算法,与上题一致。

有向无环图最小路径覆盖

定义

在一张有向图中,选择最少数量的简单路径,使得所有顶点都恰好出现在一条路径中。

定理

\[有向无环图的最小路径覆盖+相应的二分图的最大匹配的边数量=顶点数量 \]

例题

洛谷 UVA1184 Air Raid

image

实现

还是匈牙利算法,与上题一致。但别忘了用顶点数减去最大匹配数

微丸呆栩

part 2 忆re.

呃呃呃
其实是一个很温柔的女生啊。(其实有时候也会有点火爆,但嘁嘁喳喳的像只小鸟)
会处理很多奇奇怪怪的情绪呢(我的)
属于那种说话很有意思的人
啊喜欢叫我大名(坏坏坏)
求贴贴不会被拒绝(我)
“每一刻都像永远”
QAQ还有一打不能说的就不放在这里了

http://www.hskmm.com/?act=detail&tid=37627

相关文章:

  • 《IDEA 2025长效采用配置指南:有效期配置至2099年实战之JetBrains全家桶有效》​
  • ZKW线段树
  •  pytorch 66页实验题
  • Visual Studio 插件 - 喝水提醒 - 指南
  • JAVA 排序用法
  • 10/23
  • 10月23日
  • 第3天(中等题+简单题 数组、滑动窗口)
  • esp32-usb-jtag 调试踩坑
  • MySQLDay3
  • 飞牛OS通过docker部署SillyTavern酒馆
  • MySQL主从同步读写分离
  • ollama v0.12.2 版本更新详解:Qwen3 架构协助、Multi-Regex 分词器、新引擎前后缀匹配等功能升级
  • AI股票预测分析报告 - 2025年10月23日 20:26
  • 软件包管理
  • nginx反向代理测试搭建
  • 基础概念
  • .NET Core报错克服【无废话上操作】
  • 题解:P11831 [省选联考 2025] 追忆
  • 2025-10-23 MX-S 模拟赛 赛后总结【MX】
  • PCL1.12 解决memory.h中EIGEN处中断问题
  • 完整教程:状态管理库 Zustand 的接入流程与注意点
  • 20251023
  • Java常用机制 - SPI机制详解
  • 塔吊施工环境与附属设施监测!思通数科 AI 卫士筑牢全场景安全防线
  • 采用opencv来识别信用卡的号码
  • 网络设备
  • 第二十二篇
  • 《程序员修炼之道:从小工到专家》阅读笔记1
  • 负载均衡及三种软件负载