题解 P3386 【【模板】二分图匹配】

luogu

分析

匈牙利算法
(所以EK会TLE是真的吗)
不知道上面的几篇题解为什么代码这么长
注释见代码

Code

#include<bits/stdc++.h>
using namespace std;
int n,m,e,arr[1010][1010],use[1010],B[1010],ip1,ip2,ans;
int find(int x)
{
	for(int i=1;i<=m;i++)
	{
		if(arr[x][i]&&!use[i])//可以连边且没有被标记过
		{
			use[i]=1;//标记
			if(!B[i]||find(B[i]))//若没有匹配或可以将原先匹配的转移
			{
				B[i]=x;//更改匹配
				return 1;
			}
		}	
	}
	return 0;
}
int main()
{
	cin>>n>>m>>e;
	for(int i=1;i<=e;i++)
	{
		cin>>ip1>>ip2;
		if(ip1>n||ip2>m)//据说有毒瘤数据
			continue;
		arr[ip1][ip2]=1;
	}
	for(int i=1;i<=n;i++)
	{
		memset(use,0,sizeof(use));//每次初始化
		if(find(i))
			ans++;
	}
	cout<<ans;
}
posted @ 2019-08-14 19:14  G_A_TS  阅读(583)  评论(0编辑  收藏  举报