//dfs版本 hdu 1150
/*增广路径就交替路,非匹配边加匹配边,奇数次,能使匹配点加1,同时取反即改变匹配对象*/
#include<iostream>
#include<stdlib.h>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
using namespace std;
const int N=105;
int n,m;
int a[N][N];
int vis[N];
int corss[N];
int dfs(int u)
{
for(int i=1;i<=m;i++)
{
if(!vis[i]&&a[u][i])
{
vis[i]=1;
if(corss[i]==-1||dfs(corss[i]))
{
corss[i]=u;
return 1;
}
}
}
return 0;
}
int main(){
while(scanf("%d",&n))
{
if(n==0) break;
int k;scanf("%d%d",&m,&k);
memset(a,0,sizeof(a));
for(int i=0;i<k;i++)
{
int l,r,w;
scanf("%d%d%d",&w,&l,&r);
a[l][r]=1;
}
int ans=0;
memset(corss,-1,sizeof(corss));
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i)) ans++;
}
printf("%d\n",ans);
}
return 0;
}
二分图的最大匹配
最新推荐文章于 2019-07-28 04:25:22 发布