博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【二分图匹配】Plug It In!
阅读量:5886 次
发布时间:2019-06-19

本文共 1743 字,大约阅读时间需要 5 分钟。

F

先对原图跑一遍匈牙利得到原始最大匹配,再遍历每个出度>1的点,考虑若新加入点,能否找到增广路,若可行则答案对应增加

代码:

#include 
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int MAX_V = 2000;const int MAX_E = 80000;struct Hungary { struct Edge { int to, next; } es[MAX_E]; int head[MAX_V]; int V, E, match[MAX_V]; bool vis[MAX_V]; void init(int V) { this->V = V; this->E = 0; memset(head, -1, sizeof head); } void addEdge(int u, int v) { es[E].to = v; es[E].next = head[u]; head[u] = E++; } bool dfs(int u) { vis[u] = true; for (int i = head[u]; i != -1; i = es[i].next) { int v = es[i].to, w = match[v]; if (w < 0 || !vis[w] && dfs(w)) { match[v] = u; return true; } } return false; } int maxMatch() { int res = 0; memset(match, -1, sizeof match); for (int u = 0; u < V; u++) { memset(vis, false, sizeof vis); if (dfs(u)) { res++; } } return res; }} hun;int main() { int m, n, k, out[2000] = { 0 }, match[2000] = { 0 }; scanf("%d%d%d", &m, &n, &k); hun.init(m); for (int i = 0; i < k; i++) { int u, v; scanf("%d%d", &u, &v); hun.addEdge(u - 1, v - 1); out[u - 1]++; } int res = hun.maxMatch(); int ans = res; memcpy(match, hun.match, sizeof hun.match); for (int u = 0; u < m; u++) { if (out[u] > 1) { memcpy(hun.match, match, sizeof match); int cnt = 0; for (int j = 0; j < 2; j++) { hun.head[m + j] = -1; for (int i = hun.head[u]; ~i; i = hun.es[i].next) { int v = hun.es[i].to; hun.addEdge(m + j, v); cnt++; } } hun.E -= cnt; int extra = 0; for (int j = 0; j < 2; j++) { memset(hun.vis, 0, sizeof hun.vis); if (hun.dfs(m + j)) { extra++; } } ans = max(ans, res + extra); } } printf("%d\n", ans);}

转载于:https://www.cnblogs.com/stolf/p/9640980.html

你可能感兴趣的文章
高并发环境下,Redisson实现redis分布式锁
查看>>
关于浏览器的cookie
查看>>
Hyper-V 2016 系列教程30 机房温度远程监控方案
查看>>
笔记:认识.NET平台
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
struts中的xwork源码下载地址
查看>>
ABP理论学习之仓储
查看>>
我的友情链接
查看>>
Tengine新增nginx upstream模块的使用
查看>>
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>
汽车常识全面介绍 - 悬挂系统
查看>>
加快ALTER TABLE 操作速度
查看>>
学习笔记之软考数据库系统工程师教程(第一版)
查看>>
PHP 程序员的技术成长规划
查看>>