Dinic二分图匹配 || Luogu P3386
题面:【模板】二分图匹配
思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2
然后S去和N中的数建正边和反边,正边权值为1,反边权值为0;M中的数去与T建正边和反边,正边权值为1。
N、M之间的数建图一样。
然后就去跑最大流。
注意:在Dinic函数中每次更新Cur的值时,要把S和T的Cur也更新了。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int maxn=,maxm=maxn,maxe=maxm*maxn;
int N,M,u,v,E,num_edge=-,edge_head[maxn+maxm],Q[maxn+maxm],f1,f2,Dep[maxn+maxm];
int S,T,Cur[maxn+maxm];
struct Edge{int to,nx,dis;}edge[maxe];
inline void Add_edge(int from,int to,int dis){
edge[++num_edge].nx=edge_head[from];
edge[num_edge].to=to;
edge[num_edge].dis=dis;
edge_head[from]=num_edge;
return;
}
inline bool Bfs(){
memset(Dep,,sizeof(Dep));
f1=f2=;
Dep[S]=;
Q[f2++]=S;
while(f1<f2){
int x=Q[f1++];
for(int i=edge_head[x];i!=-;i=edge[i].nx){
int y=edge[i].to;
if(edge[i].dis&&Dep[y]==){
Dep[y]=Dep[x]+;
Q[f2++]=y;
}
}
}
if(Dep[T])return ;
return ;
}
inline int Dfs(int x,int fw){
if(x==T)return fw;
for(int &i=Cur[x];i!=-;i=edge[i].nx){
int y=edge[i].to;
if(Dep[y]==Dep[x]+&&edge[i].dis){
int p=Dfs(y,min(edge[i].dis,fw));
if(p>){
edge[i].dis-=p;
edge[i^].dis+=p;
return p;
}
}
}
return ;
}
inline int Dinic(){
int ans=;
while(Bfs()){
int toi=N+M+;
for(int i=;i<=toi;i++)Cur[i]=edge_head[i];
while(int k=Dfs(S,<<))ans+=k;
}
return ans;
}
int main(){
memset(edge_head,-,sizeof(edge_head));
scanf("%d%d%d",&N,&M,&E);
S=N+M+;T=N+M+;
for(int i=;i<=N;i++){
Add_edge(S,i,);
Add_edge(i,S,);
}
int toi=N+M;
for(int i=N+;i<=toi;i++){
Add_edge(i,T,);
Add_edge(T,i,);
}
for(int i=;i<=E;i++){
scanf("%d%d",&u,&v);
if(v>M||u>N)continue;
v+=N;
Add_edge(u,v,);
Add_edge(v,u,);
}
printf("%d\n",Dinic());
return ;
}
By:AlenaNuna
Dinic二分图匹配 || Luogu P3386的更多相关文章
- luogu P3386 【模板】二分图匹配
二次联通门 : luogu P3386 [模板]二分图匹配 /* luogu P3386 [模板]二分图匹配 最大流 设置源点,汇点,连到每条边上 跑一边最大流即可 */ #include <i ...
- 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)
题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...
- AtCoder AGC037D Sorting a Grid (二分图匹配)
题目链接 https://atcoder.jp/contests/agc037/tasks/agc037_d 题解 这场D题终于不像AGC032D和AGC036D一样神仙了-- 还是可做的吧 虽然考场 ...
- 洛谷 P3386 【模板】二分图匹配 Dinic版
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
- P3386 【模板】二分图匹配(匈牙利&最大流)
P3386 [模板]二分图匹配 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正 ...
- P3386 【模板】二分图匹配 -网络流版
二分图匹配 题目背景 二分图 感谢@一扶苏一 提供的hack数据 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+ ...
- 洛谷—— P3386 【模板】二分图匹配
P3386 [模板]二分图匹配(复习) 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每 ...
- 【题解】 Luogu P1402 酒店之王 (二分图匹配)
懒得复制,原题目戳我 Solution: 这题没想到这么水,就是两个二分图而已 如果房间的二分图没匹配成功就直接进入下一个人 如果房间的二分图匹配成功,食物二分图匹配不成功就把房间的\(be[ ]\) ...
- 洛谷 P3386 【模板】二分图匹配
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
随机推荐
- MyRocks安装部署
参考:https://www.cnblogs.com/WonderHow/p/5621591.html CentOS 7.3 gflags:git clone https://github.com/g ...
- 十八、RF中selenium2library构造函数中参数解释
def __init__(self, timeout=5.0, implicit_wait=0.0, ...
- JS - defer 和 async
普通 <script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,"立 ...
- Linux_SELinux使用
目录 目录 SELinux SElinux的应用 修改 SELinux 下次启动模式 修改 SELinux 上下文 上下文的快速模仿 SELinux布尔值 图形化管理SElinux SELinux错误 ...
- fiddler之数据分析和查看(inspectors)-抓包
在instpectors中主要是对请求和响应进行查看和分享,监听请求的响应内容.他有多个分页标签.界面分上下两部分,上面部分显示请求的相关信息:下面部分显示响应相关信息.简单说明常用的几个分页标签 一 ...
- Jmeter之Synchronizing Timer(同步集合点)
在性能测试时,需要压测并发,此时就需要用到Synchronizing Timer组件. 一.界面显示 二.配置说明 1.名称:标识 2.注释:备注 3.Grouping (1.Number of si ...
- REST API (四)之Generic views
通用的视图 Django’s generic views... were developed as a shortcut for common usage patterns... 它们采取一些常见的习 ...
- cross appdomain access
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- PHP 数组函数 内部指针
current( &$arr ) 每个数组的当前单元,初始值的 数组的第一个单元next ( &$arr ) 返回数组中的下一个单元 , 如果没值则返回falshprev ( & ...
- element_to_be_clickable(locator)
是等待页面元素可见的时候操作,会设置一定范围的时间,如果在时间范围内,元素可见,就 执行操作,元素不可见,就会引发TimeoutException的异常.如下是element_to_be_clicka ...