洛谷 P3386 二分图匹配 题解
这道题虽然是练习匈牙利算法的,但可以用网络流来切掉它;
我们可以建立一个超级源和一个超级汇,超级源连接左部分点,超级汇连接右部分点;
然后在该图上跑最大流就可以了;
PS:我设的超级源是2001,超级汇是2002;
#include <bits/stdc++.h>
using namespace std;
struct littlestar{
int to;
int nxt;
int w;
}star[5000010];
int head[5000010],cnt;
inline void add(int u,int v,int w)
{
star[++cnt].to=v;
star[cnt].nxt=head[u];
star[cnt].w=w;
head[u]=cnt; }
int n,m,e;
int dis[3010];
queue<int> q;
inline bool bfs()
{
memset(dis,0,sizeof(dis));
while(q.size()){
q.pop();
}
q.push(2001);
dis[2001]=1;
while(q.size()){
int u=q.front();
q.pop();
for(int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(star[i].w&&!dis[v]){
q.push(v);
dis[v]=dis[u]+1;
if(v==2002){
return 1;
}
}
}
}
return 0;
}
int dinic(int u,int flow)
{
if(u==2002){
return flow;
}
int rest=flow;
int tmp;
for(register int i=head[u];i&&rest;i=star[i].nxt){
int v=star[i].to;
if(star[i].w&&dis[v]==dis[u]+1){
tmp=dinic(v,min(rest,star[i].w));
if(!tmp) dis[v]=0;
star[i].w-=tmp;
star[i^1].w+=tmp;
rest-=tmp;
}
}
return flow-rest;
}
int maxflow;
int main()
{
scanf("%d%d%d",&n,&m,&e);
for(register int i=1;i<=n;i++){
add(2001,i,1);
add(i,2001,0);
}
for(register int i=1;i<=m;i++){
add(n+i,2002,1);
add(2002,n+i,0);
}
for(register int i=1;i<=e;i++){
int u,v;
scanf("%d%d",&u,&v);
add(u,n+v,1);
add(n+v,u,0);
}
int flow=0;
while(bfs()){
while(flow=dinic(2001,999999999)) maxflow+=flow;
}
cout<<maxflow;
}
洛谷 P3386 二分图匹配 题解的更多相关文章
- 洛谷P3386——二分图匹配
题目:https://www.luogu.org/problemnew/show/P3386 二分图匹配模板,注意左部点只dfs未匹配点. 代码如下: #include<iostream> ...
- 连续攻击游戏【P1640洛谷】二分图匹配变形【好题】【每次memset太慢了,用时间戳id。】
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
- 洛谷—— P3386 【模板】二分图匹配
P3386 [模板]二分图匹配(复习) 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每 ...
随机推荐
- CSS 的伪元素是什么?
CSS伪元素是用来添加一些选择器的特殊效果.用于:向某个选择器中的文字的首行. ㈠语法 ①伪元素的语法: selector:pseudo-element {property:value;} ②CSS类 ...
- Gene co-expression analysis for functional classification and gene–disease predictions
- selenium java 自动化测试 基于火狐浏览器/谷歌浏览器
:环境 java1.8+ieda 直接上代码 pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- Android_(控件)Chronometer计时器
Android Chronometer(计时器) 继承TextView,显示的是某个时间点开始以及之后的时间增加 运行截图 程序结构 package com.example.administrator ...
- JSP中解决session超时跳转到登陆页面并跳出iframe框架或局部区域的方法
当session会话超时,页面请求被重新定位到了登陆界面.但登录界面在iframe中的解决方案:在登录页面中加入下面的js代码: <script type="text/javascri ...
- Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)
Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java 版权声明:本 ...
- Java多线程深度探索
线程 1.优先级 每个线程有一个优先级,更高优先级的线程优先运行,优先的意思是只是在分配cpu时间段的时候,得到的概率高一些.当在某个线程创建一个新的线程,这个线程有与创建线程相同的优先级.setPr ...
- yum安装Docker
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- linux下快速查找文件(转载)
权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xxmonstor/article/deta ...
- spark 笔记 7: DAGScheduler
在前面的sparkContex和RDD都可以看到,真正的计算工作都是同过调用DAGScheduler的runjob方法来实现的.这是一个很重要的类.在看这个类实现之前,需要对actor模式有一点了解: ...