P1894 The Perfect Stall
这是一道较为规整的匈牙利算法:
#include <bits/stdc++.h>
using namespace std;
const int MAX=200+10;
int n,m,ans,cow[MAX];//cow[i]代表第i个牛栏的牛
bool vis[MAX],love[MAX][MAX];//vis是已搜查过,love记录喜爱的牛栏编号
inline int read()//快读
{
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-') f=-1;
ch=getchar();
}
while(isdigit(ch))
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
bool DFS(int x)//匈牙利算法
{
for(int i=1;i<=m;i++)//牛栏的编号在[1,m]
{
if(!vis[i]&&love[x][i])//如果这个牛栏没有搜过并且牛喜欢这个栏
{
vis[i]=true;//标记这头牛进入牛栏
if(cow[i]==0||DFS(cow[i]))//cow[i]=0,第i个牛栏没有牛,所以是可以进的||i在匹配中,但从i出发可以有增广路
{
cow[i]=