POJ3041Asteroids(二分图最大匹配)

来源:互联网 发布:网络作家怎样赚钱 编辑:程序博客网 时间:2024/06/05 02:43

原题地址

思路:将行和列转化为顶点,小行星的横坐标与纵坐标建边。即是求最小点覆盖,(最少的点数使得每条边都有点相连),二分图的最小点覆盖即是最大匹配。

#include<stdio.h> #include<vector>#include<string.h>using namespace std;vector<int>e[510];int pre[510];bool used[510];bool find(int u){int i;for(i=0;i<e[u].size();i++){int v=e[u][i];if(!used[v]){used[v]=true;if(pre[v]==-1|| find(pre[v])){pre[v]=u;return true;}}}return false;}int main(){int i,m,n,u,v,res;while(scanf("%d%d",&n,&m)!=EOF){res=0;memset(pre,-1,sizeof(pre));for(i=0;i<m;i++){scanf("%d%d",&u,&v);e[u].push_back(v);}for(i=1;i<=n;i++){memset(used,false,sizeof(used));if(find(i))res++;}printf("%d\n",res);}return 0;}


0 0
原创粉丝点击