二分图匹配

题目背景

二分图

感谢@一扶苏一 提供的hack数据

题目描述

给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数

输入输出格式

输入格式:

第一行,n,m,e

第二至e+1行,每行两个正整数u,v,表示u,v有一条连边

输出格式:

共一行,二分图最大匹配

输入输出样例

输入样例#1: 复制

1 1 1
1 1
输出样例#1: 复制

1

说明

n,m \leq 1000n,m≤1000 , 1 \leq u \leq n1≤u≤n , 1 \leq v \leq m1≤v≤m

因为数据有坑,可能会遇到 v>mv>m 的情况。请把 v>mv>m 的数据自觉过滤掉。

算法:二分图匹配

思路


dinic跑二分图最大流

一个源点(0)连接1到n

一个汇点(n+m+1)连接n+1到n+m

套上板子就可以了


 #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define inf 0x3f3f3f3f
#define maxn 2010001
using namespace std; int n,m,s,t;
struct node{
int v,next,cap;
}e[maxn];
int head[maxn],tot=;
int dis[maxn]; void add_node(int a,int b,int c)
{
e[++tot]=(node){b,head[a],c};
head[a]=tot;
} bool bfs()
{
memset(dis,-,sizeof(dis));
queue<int> q;
q.push(s);
dis[s]=;
while(!q.empty()) {
int x=q.front();
q.pop();
for(int i=head[x];i;i=e[i].next)
{
int v=e[i].v;
if(e[i].cap&&dis[v]==-)
{
dis[v]=dis[x]+;
q.push(v);
}
}
}
return dis[t]!=-;
} int dfs(int now,int f)
{
if(now==t) return f;
int rest=f;
for(int i=head[now];i;i=e[i].next)
{
int v=e[i].v;
if(e[i].cap&&rest&&dis[v]==dis[now]+)
{
int t=dfs(v,min(rest,e[i].cap));
if(!t) dis[v]=;
e[i].cap-=t;
e[i^].cap+=t;
rest-=t;
}
}
return f-rest;
} void dinic()
{
int ans=;
while(bfs())
ans+=dfs(s,inf);
printf("%d",ans);
} int main()
{
int ee;
scanf("%d%d%d",&n,&m,&ee);
int x,y;
for(int i=;i<=ee;++i) {
scanf("%d%d",&x,&y);
if(x>n||y>m) continue;
add_node(x,y+n,);
add_node(y+n,x,);
}
s=;t=n++m;
for(int i=;i<=n;++i) {
add_node(s,i,);
add_node(i,s,);
}
for(int i=;i<=m;++i) {
add_node(n+i,t,);
add_node(t,n+i,);
}
dinic();
return ;
}

P3386 【模板】二分图匹配 -网络流版的更多相关文章

  1. [洛谷P3386] [模板] 二分图匹配 (匈牙利算法)

    题目传送门 毒瘤出题人zzk出了个二分图匹配的题(18.10.04模拟赛T2),逼我来学二分图匹配. 网络流什么的llx讲完之后有点懵,还是匈牙利比较好理解(绿与被绿). 对于左边的点一个一个匹配,记 ...

  2. 洛谷 P3386 【模板】二分图匹配 Dinic版

    题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...

  3. LOJ 2548 「JSOI2018」绝地反击 ——二分图匹配+网络流手动退流

    题目:https://loj.ac/problem/2548 如果知道正多边形的顶点,就是二分答案.二分图匹配.于是写了个暴力枚举多边形顶点的,还很愚蠢地把第一个顶点枚举到 2*pi ,其实只要 \( ...

  4. cogs_396_魔术球问题_(最小路径覆盖+二分图匹配,网络流24题#4)

    描述 http://cojs.tk/cogs/problem/problem.php?pid=396 连续从1开始编号的球,按照顺寻一个个放在n个柱子上,\(i\)放在\(j\)上面的必要条件是\(i ...

  5. 【洛谷 p3386】模板-二分图匹配(图论)

    题目:给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数. 解法:匈牙利算法.(以前我总是不记得......)实质上应该有贪心的思想,每次都尽量匹配,找到能和自己匹配的也尽量让它们匹配 ...

  6. 模板——二分图匹配KM

    具体方法就不介绍了,详见 https://blog.csdn.net/sixdaycoder/article/details/47720471 主要讲一些注意点: 1:不直接将未匹配的y减小是因为要保 ...

  7. POJ-3041-建图/二分图匹配/网络流

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26351   Accepted: 14254 Descr ...

  8. BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)

    云神说他二分图匹配从来都是用网络流水过去的...我要发扬他的精神.. 这道题明显是二分图匹配.网络流的话可以二分答案+最大流.虽然跑得很慢.... -------------------------- ...

  9. P3386 【模板】二分图匹配(匈牙利&最大流)

    P3386 [模板]二分图匹配 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正 ...

随机推荐

  1. easyUi引入方法

    1:创建一个动态web工程:    去官网http://www.jeasyui.net/download/下载官网文档    我去官网下载的最新版本,个人根据自己的需求下载即可.2:在webConte ...

  2. 兼容IE7以上的无缝滚动,带箭头、停顿

    <!DOCTYPE HTML><html> <head>        <meta charset="utf-8" />       ...

  3. 13 jmeter性能测试实战--FTP程序

    需求 上传一个文件到服务器(put),下载一个文件到本地(get). 测试步骤 1.创建一个线程组. 2.线程组-->添加-->配置元件-->FTP请求缺省值(可有可无,相当于给“服 ...

  4. hashcode()和equals()的作用、区别、联系

        介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode() ...

  5. 十天精通CSS3(5)

    background-origin 设置元素背景图片的原始起始位置. 语法: background-origin : border-box | padding-box | content-box; 参 ...

  6. IO操作文件的复制与删除

    import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IO ...

  7. spring boot 使用静态资源

    ./ 当前目录../ 父级目录/ 根目录 spring boot 打包时: The default includes are as follows: 默认包括的文件 public/**, resour ...

  8. word中拷贝图片到matlab

    完全可以! step1:在wod用鼠标右键复制 step2:打开附件-画图,点工具栏-编辑-粘贴(或ctl+v) step3:在MATLAB中调用A = imead(filename) 例如A=ime ...

  9. window7 触屏操作相关

    一.体系概述 1.Windows Touch Input 和 Gestures消息 Windows Touch消息特性 通过在执行期间的监听和解释来使能.下面的示例展示了Windows7 上消息是怎么 ...

  10. html04

    web的三要素:HTML:搭建页面的基本结构css: 对页面进行修饰-让页面更美观JavaScript:让页面可以有交互行为(用户和界面)1.js是什么:JavaScript :页面的脚本语言,运行在 ...