洛谷 P3386 【模板】二分图匹配
题目背景
二分图
题目描述
给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数
输入输出格式
输入格式:
第一行,n,m,e
第二至e+1行,每行两个正整数u,v,表示u,v有一条连边
输出格式:
共一行,二分图最大匹配
输入输出样例
说明
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 的数据自觉过滤掉。
算法:二分图匹配
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> const int MAXN=1010; using namespace std; int n,m,e,map[MAXN][MAXN]; int ans,use[MAXN],girl[MAXN]; bool find(int x){ for(int j=1;j<=m;j++) if(map[x][j]==1&&use[j]==0){ use[j]=1; if(girl[j]==0||find(girl[j])){ girl[j]=x; return 1; } } return 0; } int main(){ scanf("%d%d%d",&n,&m,&e); for(int i=1;i<=e;i++){ int x,y; scanf("%d%d",&x,&y); if(x>m||y>m) continue; map[x][y]=1; } for(int i=1;i<=n;i++){ memset(use,0,sizeof(use)); if(find(i)) ans++; } printf("%d",ans); }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。