首页 > 其他 > 详细

3386 二分图 洛谷luogu [模版]

时间:2019-01-21 14:17:54      阅读:143      评论:0      收藏:0      [点我收藏+]

题目背景

二分图

感谢@一扶苏一 提供的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,m1000, 1 \leq u \leq n1un, 1 \leq v \leq m1vm ,e \le n\times men×m

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

算法:二分图匹配

 

 

 

----------------------cut-------------------------------------------------------------------------------------------------

 

 

#include<bits/stdc++.h>

int n,m,e,ans=0,mp[10000][10000],flg[10000],folw[10000],u,v;

bool find(int x)
{
for(int i=1;i<=m;i++)
{
if(mp[x][i] && !flg[i])
{
flg[i] = 1;
if(find(folw[i]) || !folw[i]) // 继续找 或 没有其他的点与i项相连
{
folw[i] = x;
return 1;
} //判断是不是唯一对应
}
}
return 0;
}

int main()
{
scanf("%d%d%d",&n,&m,&e);
for(int i=1;i<=e;i++)
{
scanf("%d%d",&u,&v);
mp[u][v]=1; //u和v匹配 标记
}
for(int i=1;i<=n;i++)
{
memset(flg,0,sizeof(flg)); // 赋初值为0
if(find(i))
ans++;
}
printf("%d",ans);
return 0;
}

 

3386 二分图 洛谷luogu [模版]

原文:https://www.cnblogs.com/darlingroot/p/10297472.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!