标签:blog os io for 问题 div 代码 amp
不知道是我个人问题还是怎么地 单纯看算法完全看不进去 只有读代码才能看出精华
这题应该是最基础的二分匹配了 不过刚刚看懂还是觉得实在是神奇
先给一个女生1找个对应的男生
再到下个女生2 如果这个女生找到的男生已经有对应的女生1
再找女生1的增广路
到最后得到最大匹配
(理解得不是很深刻 表达也做不到很清晰= =)
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<stack> #define mem(a,b) memset(a,b,sizeof(a)) #define ll __int64 #define MAXN 1000 #define INF 0x7ffffff #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; int map[510][510]; int vis[2000]; int link[2000]; int k,w,m,ans; int find(int x) { int i; for(i=1;i<=m;i++) { if(!vis[i]&&map[x][i]) { vis[i]=1; if(!link[i]||find(link[i])) { link[i]=x; return 1; } } } return 0; } int main() { int i,j; int na,nv; while(scanf("%d",&k)!=EOF&&k) { scanf("%d%d",&w,&m); ans=0; mem(map,0); mem(link,0); for(i=1;i<=k;i++) { scanf("%d%d",&nv,&na); map[nv][na]=1; } for(i=1;i<=w;i++) { mem(vis,0); if(find(i)) ans++; } printf("%d\n",ans); } return 0; }
标签:blog os io for 问题 div 代码 amp
原文地址:http://www.cnblogs.com/sola1994/p/3911565.html