//二分图,最小点覆盖,注意:At the beginning they are both work at mode_0.
#include<iostream>
using namespace std;
int map[102][102];
bool visity[102];
int visitx[102];
int matchingy[102];
int n,m,k;
bool dfs(int u)
{
int v;
for(v=1;v<m;v++)
{
if(visity[v]==false&&map[u][v]==1)
{
visity[v]=true;
if(matchingy[v]==-1||dfs(matchingy[v])==true)
{
matchingy[v]=u;
return true;
}
}
}
return false;
}
int main()
{
int num;
int i;
int from,to;
int result;
while(scanf("%d",&n))
{
if(n==0)
break;
scanf("%d %d",&m,&k);
memset(map,0,sizeof(map));
for(i=0;i<k;i++)
{
scanf("%d %d %d",&num,&from,&to);
map[from][to]=1;
}
result=0;
memset(matchingy,255,sizeof(matchingy));
for(i=1;i<n;i++)
{
memset(visity,false,sizeof(visity));
if(dfs(i))
{
result++;
}
}
printf("%d/n",result);
}
return 0;
}
POJ 1325二分图,最小点覆盖
最新推荐文章于 2021-08-10 19:52:49 发布