洛谷 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行,每 ...
随机推荐
- jdk,jre下载安装
JDK安装https://blog.csdn.net/u012934325/article/details/73441617/jre需要手动生成在JDK安装目录下,的bin cmd执行bin\ jli ...
- 冒泡排序和选择排序(bubble sort and selection sort)
Bubble sort Basic Method: import random nums = [random.randint(1,20) for _ in range(10)] #制作一个无序数字列表 ...
- [CSP-S模拟测试]:午餐(贪心+最短路)
题目传送门(内部题115) 输入格式 第一行两个正整数$n,m$. 接下来$m$行,每行$4$个正整数$u_j,v_j,L_j,R_j$. 接下来一行$n$个数,若第$i$个数为$1$,则$i$号同学 ...
- 【每日一包0009】group-array
[github地址:https://github.com/ABCDdouyae...] group-array 对数组里面的多项按照指定的key进行整合 用法:group-array(arr, key ...
- 自动化部署脚本--linux执行sh脚本
自动化部署脚本文件目录: 运行主程序:./install.sh #!/bin/bash SCRIPTPATH=$(cd "$(dirname "$0")"; p ...
- 剑指offer31----栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对 ...
- JavaScript 函数相关属性
1.name 既函数名 function test(){ console.log("Haha") }; console.log(test.name)//test 2.length属 ...
- Android采用pm命令静默卸载应用
卸载app的方式有多种,可以直接调用android系统的卸载程序,但是这样会调出android卸载提示框,问题就是真的不好看. 所以采用静默卸载的方式,避免弹出系统提示框. 方法一(调用系统卸载程序) ...
- LeetCode 54. 螺旋矩阵(Spiral Matrix) 剑指offer-顺时针打印矩阵
题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, ...
- jQuery .submit()
.submit() Events > Form Events | Forms .submit( handler )Returns: jQuery Description: Bind an eve ...