[hdu2063]过山车(二分图匹配)
2024-08-30 08:32:00
题意:每个女人有感兴趣的k个男人,过山车两人一组,求最大匹配数。
解题关键:二分图最大匹配。匈牙利算法求解。
1、链式前向星建图
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#define maxn 250020
using namespace std;
typedef long long ll;
int n,m,k,a,b;
struct Edge{
int nxt;
int to;
int w;
}e[maxn];
int head[maxn],cnt;
void add_edge(int u,int v){
e[cnt].to=v;
e[cnt].nxt=head[u];
head[u]=cnt++;
}
int pre[maxn];
bool vis[maxn];
bool dfs(int u){
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].to;
if(!vis[v]){
vis[v]=true;
if(pre[v]==-||dfs(pre[v])){
pre[v]=u;
//pre[u]=v;
return true;
}
}
}
return false;
} int hungary(){
int ans=;
memset(pre,-,sizeof pre);
for(int i=;i<=m;i++) {
if(pre[i]==-) {
memset(vis,,sizeof vis);
if(dfs(i)) ans++;
}
}
return ans;
}
int main(){
while(scanf("%d",&k)!=EOF&&k){
memset(head, -, sizeof head);
cnt=;
scanf("%d%d",&m,&n);
for(int i=;i<k;i++){
scanf("%d%d",&a,&b);
add_edge(a,b+m);
}
int ans=hungary();
printf("%d\n",ans);
}
return ;
}
2、邻接矩阵建图
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#define maxn 505
using namespace std;
typedef long long ll;
bool G[maxn][maxn];
int pre[maxn];
bool vis[maxn];
int n,m,k;
bool dfs(int u){
for(int i=;i<=n;i++){
if(G[u][i]&&!vis[i]){
vis[i]=true;
if(pre[i]==-||dfs(pre[i])){
pre[i]=u;
return true;
}
}
}
return false;
} int hungary(){
int num=;
memset(pre,-,sizeof pre);
for(int i=;i<=m;i++){
memset(vis,,sizeof vis);
if(dfs(i)) num++;
}
return num;
}
int main(){
int u,v;
while(scanf("%d",&k)!=EOF&&k){
scanf("%d%d",&m,&n);
memset(G,,sizeof G);
for(int i=;i<k;i++){
scanf("%d%d",&u,&v);
G[u][v]=;
}
int ans=hungary();
printf("%d\n",ans);
}
return ;
}
最新文章
- phpmyadmin #1045 - Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO)
- 用程序获取 Internet 时间 无通用性程序后的暂用办法
- Json序列化对象
- Memcached、Redis OR Tair
- jquery tab键转换
- sqlserver添加用户的时候出现 错误18456
- [置顶] iOS开发规范
- CALayer精讲
- 【BZOJ1823】 [JSOI2010]满汉全席
- 安卓高手之路之java层Binder
- 你真的理解Java的this和super吗?
- IntelliJ IDEA 12 创建Web项目 教程 超详细版
- Es6主要特征详解
- mybatis 使用auto mapping原理实现表间关联
- [洛谷P1357] 花园
- 「luogu3313」[SDOI2014] 旅行
- PAT甲级1078 Hashing【hash】
- 利用pandas对numpy数组进行简单的科学计算
- ReactiveX 学习笔记(21)使用 Rx.NET + ReactiveUI 进行 GUI 编程
- 洛谷.T21778.过年(线段树 扫描线)
热门文章
- C#下的摄像机标定
- ch.poweredge.ntlmv2-auth
- EasyNVR实现海康、大华NVR硬盘录像机Web无插件播放方案(支持取特定时间段视频流)
- vue 向后台提交数据
- 九度OJ 1158:买房子 (基础题)
- 如何使用RadioGroup和RadioButton实现FragmentTabHost导航效果?
- imagecopyresampled()改变图片大小后质量要比imagecopyresized()高。
- Java AQS详解(转)
- Docker实践中遇到的坑
- 应用索引技术优化SQL 语句(转)