首页 > 代码库 > hdu 2063 过山车
hdu 2063 过山车
不知道是我个人问题还是怎么地 单纯看算法完全看不进去 只有读代码才能看出精华
这题应该是最基础的二分匹配了 不过刚刚看懂还是觉得实在是神奇
先给一个女生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|1using 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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。