luogu P3386 【模板】二分图匹配
二次联通门 : luogu P3386 【模板】二分图匹配
/*
luogu P3386 【模板】二分图匹配 最大流
设置源点,汇点,连到每条边上
跑一边最大流即可
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue> #define Max 100008
#define INF 1e7 using namespace std; inline int min (int a, int b)
{
return a < b ? a : b;
} void read (int &now)
{
now = ;
char word = getchar ();
while (word > '' || word < '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + word - '';
word = getchar ();
}
} struct Edge
{
int from;
int to;
int flow;
int next;
}edge[Max << ]; int deep[Max];
int Edge_Count;
int edge_list[Max];
int S, T; inline void AddEdge (int from, int to, int dis)
{
Edge_Count++;
edge[Edge_Count].to = to;
edge[Edge_Count].flow = dis;
edge[Edge_Count].next = edge_list[from];
edge_list[from] = Edge_Count;
} int Get_Flow (int now, int flow)
{
if (now == T || flow <= )
return flow;
int res = , pos;
for (int i = edge_list[now]; i; i = edge[i].next)
{
if (deep[edge[i].to] != deep[now] + || edge[i].flow <= )
continue;
pos = Get_Flow (edge[i].to, min (edge[i].flow, flow));
edge[i].flow -= pos;
edge[i ^ ].flow += pos;
res += pos;
flow -= pos;
if (flow <= )
return res;
}
return res;
} int E, N, M;
int Answer; void Bfs ()
{
while (true)
{
bool flag = false;
memset (deep, -, sizeof deep);
queue <int> Queue;
Queue.push (S);
deep[S] = ;
int now;
while (!Queue.empty ())
{
now = Queue.front ();
Queue.pop ();
for (int i = edge_list[now]; i; i = edge[i].next)
if (deep[edge[i].to] < && edge[i].flow)
{
deep[edge[i].to] = deep[now] + ;
if (edge[i].to == T)
{
flag = true;
break;
}
Queue.push (edge[i].to);
}
if (flag)
break;
}
if (deep[T] <= )
break;
Answer += Get_Flow (S, INF);
}
} int main (int argc, char *argv[])
{
read (N);
read (M);
read (E);
S = Max - ;
T = Max - ;
int x, y;
for (int i = ; i <= E; i++)
{
read (x);
read (y);
if (x > M || y > M)
continue;
AddEdge (x, N + y + , );
AddEdge (N + y + , x, );
}
for (int i = ; i <= N; i++)
{
AddEdge (S, i, );
AddEdge (i, S, );
}
for (int i = ; i <= M; i++)
{
AddEdge (N + i + , T, );
AddEdge (T, N + i + , );
}
Bfs ();
printf ("%d", Answer);
return ;
}
luogu P3386 【模板】二分图匹配的更多相关文章
- [洛谷P3386] [模板] 二分图匹配 (匈牙利算法)
题目传送门 毒瘤出题人zzk出了个二分图匹配的题(18.10.04模拟赛T2),逼我来学二分图匹配. 网络流什么的llx讲完之后有点懵,还是匈牙利比较好理解(绿与被绿). 对于左边的点一个一个匹配,记 ...
- 【洛谷 p3386】模板-二分图匹配(图论)
题目:给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数. 解法:匈牙利算法.(以前我总是不记得......)实质上应该有贪心的思想,每次都尽量匹配,找到能和自己匹配的也尽量让它们匹配 ...
- 模板——二分图匹配KM
具体方法就不介绍了,详见 https://blog.csdn.net/sixdaycoder/article/details/47720471 主要讲一些注意点: 1:不直接将未匹配的y减小是因为要保 ...
- P3386 【模板】二分图匹配(匈牙利&最大流)
P3386 [模板]二分图匹配 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正 ...
- 洛谷—— P3386 【模板】二分图匹配
P3386 [模板]二分图匹配(复习) 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每 ...
- P3386 【模板】二分图匹配
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
- AC日记——【模板】二分图匹配 洛谷 P3386
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
- Dinic二分图匹配 || Luogu P3386
题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...
- 洛谷 P3386 【模板】二分图匹配
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
随机推荐
- 『Python基础』第8节:格式化输出
现在有一个需求, 询问用户的姓名, 年龄, 工作, 爱好, 然后打印成以下格式 ************ info of Conan ************ name: Conan age: 23 ...
- java连接腾讯云上的redis
目录 腾讯云上的配置 redis连接单机和集群 依赖 pom.xml redis参数的配置文件 遗留问题 腾讯云上的配置 在安全组上打开相关的端口即可 "来源" 就是你的目标服务器 ...
- 代码质量控制 & 编程注意项
目录 代码质量控制 编程注意项 代码&功能优化 代码优化 功能&模块优化 其他 小技巧 调试 用于记录工作中出现的问题和编程时需要注意的重点,保证代码质量和编程效率 代码质量控 ...
- css 省略号的写法
单行省略号 overflow: hidden; text-overflow:ellipsis; white-space: nowrap; width:500px; 多行省略号 overflow: hi ...
- java 线程实现、线程暂停和终止 、线程联合join、线程基本信息获取和设置、线程优先级
转载地址:速学堂 https://www.sxt.cn/Java_jQuery_in_action/eleven-inheritthread.html 1. 通过继承Thread类实现多线程 继承Th ...
- 4_PHP流程控制语句_2_循环结构
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP流程控制共有3种类型:条件控制结构.循环结构以及程序跳转和终止语句. 4.2 循环结构 4.2.1 whil ...
- 我对xss以及sql的理解
我对xss以及sql的理解 本文作者:情殇(查看作者所有博文) 作者邮箱:3135117931@qq.com 发布时间: Fri, 12 Jul 2019 19:16:00 +0800 Xss和sql ...
- ArduPilot简介
源码地址:https://github.com/ArduPilot/ardupilot/ 参考:http://ardupilot.org/dev/docs/learning-the-ardupilot ...
- redis入门初学知识
一. Redis 介绍 Remote Dictionary Server(Redis)是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提 ...
- sed初级教程
简介 sed是作为特殊目的的编辑器而创建的,用于专门执行脚本:与ed不同,它不能交互地使用.sed面向字符流.默认情况下,到sed的所有输入都会经过相应的处理,并转为标 准输出.输入文件本身不发生改变 ...