匈牙利模板
但是我感觉题是错题,因为最后没考虑两两男女之内的。。。。
于是无法跑最大流
老老实实匈牙利吧
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<queue>
using namespace std;
int a[505][505];
int vit[10005];
int f[10005];
int ans,n,k,tot;
int head[10005];
struct node
{
int u;
int next;
};
node b[10005];
void add(int u,int v)
{
b[tot].u=v;
b[tot].next=head[u];
head[u]=tot++;
}
int dfs(int x)
{
for(int y=head[x];y;y=b[y].next)
{
int k=b[y].u;
if(!vit[k])
{
vit[k]=1;
if(f[k]==0||dfs(f[k]))
{
f[k]=x;
return 1;
}
}
}
return 0;
}
void Search()
{
for(int i=1;i<=n;i++)
{
memset(vit,0,sizeof(vit));
if(dfs(i))
ans++;
}
}
int main(){
scanf("%d%d",&n,&k);
//memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
memset(head,0,sizeof(head));
tot=1;
for(int i=1;i<=k;i++){
int x,y;
scanf("%d%d",&x,&y);
x++;
y++;
add(x,y);
// add(y,x);
}
ans=0;
Search();
printf("%d\n",n-ans);
return 0;
}
本文通过一个具体的实例展示了如何使用匈牙利算法解决分配问题。针对特定条件下的匹配问题,文章提供了一段C++实现代码,并详细解释了其运行原理及步骤。通过对这段代码的理解,读者可以更好地掌握匈牙利算法的应用。
995

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



