hdu 2063 过山车【二分图匹配,ver匈牙利
2016-09-28 19:36
393 查看
裸的匈牙利,为什么ACM的读入如此鬼畜233333
被读入卡wa了一次,模板题没有一A,十分不开心23333
#include<bits/stdc++.h>
#define MAXN 1005
using 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;
else
if(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;
}
被读入卡wa了一次,模板题没有一A,十分不开心23333
#include<bits/stdc++.h>
#define MAXN 1005
using 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;
else
if(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;
}
相关文章推荐
- UVa11520-Fill the Square
- Android 拦截 LinearLayout RelativeLayout ViewGroup 监听 传递到下面布局
- VR 触摸板模拟上下左右按键
- 很不错的Map工具类
- RE:从零开始的数据结构生活
- 【JZOJ 4799】我的快乐时代
- 列表
- 微信应用号开发必备技能都在这里了啦!
- Linux workqueue工作原理
- Apache默认index页面
- oracle10G/11G官方下载地址集合 直接迅雷下载
- emmet使用简介
- macOS apache配置及开启虚拟服务器的开启,apache开启重写模式
- 什么是SOAP?
- navicat连接oracle数据库ORA-28547:connection to server failed, probable Oracle Net admin error错误,解决方法
- Axure RP 8.0 基础1-10
- Gym 100962A ABBA (高斯消元)
- C# Udp Socket例子 客户端
- 如何生成支付宝RSA密钥
- freemaker学习总结