可以用匈牙利跑,但是刚学完网络流,就试着用dinic跑了一发
题目链接:洛谷P3386

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <queue>
#include <functional>
#include <vector>
#include <stack>
#include <set>
#include <bitset>
using namespace std;
typedef  long long ll;
const int maxn=5000+50;
const int inf=0x3f3f3f3f;
const int MOD=998244353;
const int HASH=131;int n, m, cnt;//点,边,前向星计数
int head[maxn];//前向星
int level[maxn];//分层
int cur[maxn];//当前弧优化struct Edge
{int to;ll val;int next;
}edge[maxn*maxn];void add(int u,int v,int val)
{edge[cnt].to=v;edge[cnt].val=val;edge[cnt].next=head[u];head[u]=cnt++;
/*反向存边,在原边基础上+1*/edge[cnt].to=u;edge[cnt].val=0;edge[cnt].next=head[v];head[v]=cnt++;
}bool find_level(int s,int t)//源点和汇点,该bfs函数用来确定深度(层次)
{queue<int> q;memset(level,0,sizeof(level));for(int i=1;i<=n;i++){cur[i]=head[i];}int u=s;level[u]=1;q.push(u);while(!q.empty()){u=q.front();q.pop();for(int i=head[u];~i;i=edge[i].next){int v=edge[i].to;ll val=edge[i].val;if(!level[v]&&val)//层次不为0且容量不为0{level[v]=level[u]+1;q.push(v);}}if(level[t])//如果t有分层则继续下一步的处理{return true;}}return false;
}ll updata(int u,ll u_val,int t)//dfs更新
{if(u==t){return u_val;}ll used=0;//使用多少容量for(int &i=cur[u];~i;i=edge[i].next)//弧优化,神奇{int v=edge[i].to;ll val=edge[i].val;if(level[v]==level[u]+1&&val)//如果是相邻两层且有剩余容量{ll tmp=updata(v,min(u_val-used,val),t);//dfs递归,找最小容量edge[i].val-=tmp;edge[i^1].val+=tmp;used+=tmp;if(used==u_val) return used;//达到最大值,本条增广路搜索完毕}}if(used==0) level[u]=-1;//找不到增广路,减枝,节点作废return used;
}ll Dinic(int s,int t)
{ll ans=0;while(find_level(s,t)){ans+=updata(s,inf,t);}return ans;
}void init()
{cnt=0;memset(head,-1,sizeof(head));
}int main()
{init();int c;cin>>n>>m>>c;for(int i=1;i<=c;i++){int u,v;cin>>u>>v;u++,v=n+v+1;add(u,v,1);}for(int i=1;i<=n;i++)add(1,i+1,1);n++;for(int i=1;i<=m;i++)add(n+i,n+m+1,1);int s=1,t=n+m+1;n=t;cout<<Dinic(s,t)<<endl;return 0;
}

洛谷P3386-二分图最大匹配相关推荐

  1. 洛谷P3386:网络流之二分图匹配,最大流算法

    二分图:我的理解是,对图中的点集,可分为两个集合U和V,使得两个集合之间存在通路,且集合内部不存在通路.如上图. 匹配:两两不含公共端点的边集合M 最大匹配:边数最多的匹配 完美匹配:最大匹配的匹配数 ...

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

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

  3. P3386二分图最大匹配模版

    传送门 声明几个定义: 1.二分图 对于一个图G=(V,E),若能将其点集分为两个互不相交的两个子集X.Y,使得X∩Y=∅,且对于G的边集V,若其所有边的顶点全部一侧属于X,一侧属于Y,则称图G为一个 ...

  4. 【洛谷P3386】【模板】二分图匹配【网络流】

    题目大意: 题目链接:https://www.luogu.org/problemnew/show/P3386 求一个二分图的最大匹配. 思路: 二分图匹配的模板.可以用匈牙利做. 听说这道题卡Dini ...

  5. 洛谷P3386 【模板】二分图匹配

    匈牙利算法模板 1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstrin ...

  6. 二分图——洛谷P3386 【模板】二分图匹

    https://www.luogu.org/problem/show?pid=3386 匈牙利算法不断寻找增广路: 尽可能让当前枚举的i可以匹配: 时间复杂度自己看代码: #include<cs ...

  7. 洛谷3386二分图模板

    题目:https://www.luogu.org/problemnew/show/P3386 注意代码中标记处. #include<iostream> #include<cstdio ...

  8. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

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

    题目地址: https://www.luogu.com.cn/problem/P3386 题目描述: 给定一个二分图,其左部点的个数为nnn,右部点的个数为mmm,边数为eee,求其最大匹配的边数.左 ...

最新文章

  1. 实现iOS图片等资源文件的热更新化(二):自定义的动态 imageNamed
  2. 错误:Script file ‘D:\software_install\Anaconda_install\Scripts\pip-script.py‘ is not present.完美解决方法
  3. 2021年河北高考生成绩排名查询,2021年河北高考成绩查询网站查分网址:http://www.hebeea.edu.cn/...
  4. 【Python】Pandas中的宝藏函数-rank()
  5. C#读取资源文件的两种方法及保存资源文件到本地
  6. c语言在文本每一行末尾追加字符串,c语言在末尾添加 C语言 在链表尾部添加节点...
  7. js中for循环调用回调函数,一直循环最后一个
  8. 异常将上下文初始化事件发送到类的侦听器实例_Java虚拟机从入门到入土之JVM的类加载机制
  9. 硬盘检测神器-HD Tune Pro/Hard Disk Sentinel
  10. ASP类计算机专业毕业设计题目
  11. Linux上Meson安装及使用
  12. 特斯拉灯光秀指南「GitHub 热点速览 v.22.01」
  13. 2010中国互联网哈哈榜:十大梁山好汉
  14. openwrt修改默认网关地址_非常详细的锐捷网关路由配置教程,适合新手小白
  15. dva 的一些特殊的写法
  16. c atol()函数_atol()函数以及C ++中的示例
  17. 海信E8H Mini LED 电视评测
  18. 小红书竞品分析_小红书与网易考拉海购竞品分析报告
  19. 1--MySQL基础知识内容
  20. swing重写右上角叉号

热门文章

  1. 递归算法计算Legendre多项式
  2. Suzy找到实习了吗 Day 21 | 二叉树进行中:530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先
  3. Java核心技术读书笔记01
  4. D3DAPI大全,全部函数
  5. 关于许嵩很有意境的歌词
  6. 一元三次方程组的解法
  7. 漏洞分析---关于OpenSSL“心脏出血”漏洞的分析
  8. 「react进阶」一文吃透React高阶组件(HOC)
  9. 基于Ad hoc的多跳通信
  10. html文件无法找到,html文件无法打开