#include<iostream>//最小路径匹配+传递闭包
using namespace std;
bool a[502][502];
bool visity[502];
int n,m;
int matchingy[502];
bool dfs(int u)
{
int v;
for(v=1;v<=n;v++)
{
if(visity[v]==false&&a[u][v]==true)
{
visity[v]=true;
if(matchingy[v]==-1||dfs(matchingy[v])==true)
{
matchingy[v]=u;
return true;
}
}
}
return false;
}
int main()
{
int i,j,k;
int a1,a2;
int result;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
memset(a,false,sizeof(a));
for(i=1;i<=m;i++)
{
scanf("%d %d",&a1,&a2);
a[a1][a2]=true;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
for(k=1;k<=n;k++)
{
if((a[j][k]==true&&a[k][i]==true)||(a[j][i]==true))
{
a[j][i]=true;
}
}
}
}
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",n-result);
}
return 0;
}
POJ 2594
最新推荐文章于 2021-05-13 15:19:05 发布
1780

被折叠的 条评论
为什么被折叠?



