HDU1845(最大匹配)

来源:互联网 发布:apache tiles 教程 编辑:程序博客网 时间:2024/05/22 10:35

两个点集,个数都为n,求出最大匹配,然后除以2

#include <stdio.h>#include <string.h>#include <string>#include <iostream>#include <algorithm>#include <vector>#define maxn 5005#define LL long longusing namespace std;int n;vector<int> G[maxn];int lx[maxn],ly[maxn];bool vis[maxn];bool DFS(int u){for(int i=0;i<G[u].size();i++){int v=G[u][i];if(!vis[v]){vis[v]=1;if(ly[v]==0 || DFS(ly[v])){ly[v]=u;lx[u]=v;return true;}}}return false;}int match(){int ans=0;for(int i=1;i<=n;i++){if(lx[i]==0){for(int j=0;j<=n;j++)vis[j]=0;if(DFS(i))ans++;}}return ans;}int main(){int t;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=1;i<=n;i++)G[i].clear();for(int i=0;i<=n;i++)lx[i]=0,ly[i]=0;int m=n*3/2;while(m--){int u,v;scanf("%d%d",&u,&v);G[u].push_back(v);G[v].push_back(u);}printf("%d\n",match()/2);}return 0;}


0 0
原创粉丝点击