hdu 2063 过山车【二分图匹配,ver匈牙利

来源:互联网 发布:淘宝平板客户端和手机 编辑:程序博客网 时间:2024/06/03 20:55

裸的匈牙利,为什么ACM的读入如此鬼畜233333

被读入卡wa了一次,模板题没有一A,十分不开心23333

#include<bits/stdc++.h>#define MAXN 1005using namespace std;int k,n,m;struct t1{int to,nxt;}edge[MAXN<<1];int cnt_edge=0;int fst[MAXN];void addedge(int x,int y){edge[++cnt_edge].to=y;edge[cnt_edge].nxt=fst[x];fst[x]=cnt_edge;}int tag[MAXN],vis[MAXN];int dfs(int now){if(vis[now])return 0;vis[now]=1;for(int tmp=fst[now];tmp;tmp=edge[tmp].nxt){if(edge[tmp].to==tag[now])continue;int aim=edge[tmp].to;if(!tag[aim])return tag[now]=aim,tag[aim]=now,1;elseif(dfs(tag[aim]))return tag[now]=aim,tag[aim]=now,1;}return 0;}void init(){memset(tag,0,sizeof tag);memset(fst,0,sizeof fst);memset(edge,0,sizeof edge);cnt_edge=0;}int read_x,read_y;int main(){while((~scanf("%d",&k)&&k!=0)){scanf("%d%d",&n,&m);init();for(int i=1;i<=k;++i)scanf("%d%d",&read_x,&read_y),addedge(read_x,read_y+n),addedge(read_y+n,read_x);int nn=m+n;int ans=0;for(int i=1;i<=nn;++i){memset(vis,0,sizeof vis);if(!tag[i])ans+=dfs(i);}printf("%d\n",ans);}return 0;}


0 0