POJ3041:Asteroids【二分图匹配】

本文介绍了一个基于Konig定理实现的二分图最大匹配算法,该算法通过深度优先搜索来求解最小顶点覆盖问题,并提供了一个具体的代码实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二分图的最大匹配=最小顶点覆盖(Konig定理)=最大独立集的补集最大匹配经典的三种模型  这题就是最小顶点覆盖,顺便这题留给我的经验就是调试的时候一定要细心细心再细心对模板的各个细节都要熟!!

#include<cstdio>

#include<string.h>

#include<iostream>

using namespace std;

const int maxn=10005;

intn,map[maxn][maxn]={{0}},match[maxn]={0},visit[maxn]={0},x,y,ans=0,k;

int dfs(int t)

{

   for (int i=1;i<=n;i++)if (map[t][i]==1 && visit[i]==0)

    {

       visit[i]=1;

       if (match[i]==-1 ||dfs(match[i])==1)

       {

           match[i]=t;

           return 1;

       }

    }

   return 0;

}

int main()

{

   scanf("%d%d",&n,&k);

   for(int i=1;i<=k;i++)

    {

       scanf("%d%d",&x,&y);

       map[x][y]=1;

    }

   memset(match,255,sizeof(match));

   for(int i=1;i<=n;i++)

    {

           memset(visit,0,sizeof(visit));

           if (dfs(i)==1)ans++;

    }

   printf("%d\n",ans);

   return 0;

}

转载于:https://www.cnblogs.com/philippica/p/4006963.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值