nyoj 239 月老的难题 【二分匹配之匈牙利】
月老的难题
- 描述
-
月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘。
现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭。
现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福家庭数量吧。
假设男孩们分别编号为1~n,女孩们也分别编号为1~n。
- 输入
-
第一行是一个整数T,表示测试数据的组数(1<=T<=400)
每组测试数据的第一行有两个整数n,K,其中男孩的人数与女孩的人数都是n。(n<=500,K<=10 000)
随后的K行,每行有两个整数i,j表示第i个男孩与第j个女孩有可能结成幸福的家庭。(1<=i,j<=n) - 输出
- 对每组测试数据,输出最多可能促成的幸福家庭数量
- 样例输入
-
1 3 4 1 1 1 3 2 2 3 2
- 样例输出
-
2
这道题, 用邻接矩阵TL, 得用邻接表
代码(链式前向星):
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define M 20005
using namespace std;struct node{int to, next;
}s[M];
int head[M], res[555], n;
bool vis[555];int find(int u){int i;for(i = head[u]; i != -1; i = s[i].next){int temp = s[i].to;if(!vis[temp]){vis[temp] = 1;if(res[temp]== 0||find(res[temp])){res[temp] = u;return true;}}}return false;
}int main(){//freopen("stdin.txt", "r", stdin);int t, k;scanf("%d", &t);while(t --){scanf("%d%d", &n, &k);memset(res, 0, sizeof(res));memset(head, -1, sizeof(head));int a, b;for(int i = 0; i < k; i ++){scanf("%d%d", &a,&b);s[i].to = b;s[i].next = head[a];head[a] = i;}int ans = 0;for(int i = 1; i <= n; i ++){memset(vis, 0, sizeof(vis));if(find(i)) ++ans;}printf("%d\n", ans);}
}
用vector内存有点大
#include <stdio.h>
#include <string.h>
#include <vector>
#define M 555
using namespace std;vector <int > map[M];
int vis[M], res[M];
int n;int find(int a){int i;for(i = 0; i < map[a].size(); i ++){if(!vis[map[a][i]]){vis[map[a][i]] = 1;if(res[map[a][i]] == 0||find(res[map[a][i]])){res[map[a][i]] = a;return 1;}}}return 0;
}int main(){int t, k;scanf("%d", &t);while(t --){scanf("%d%d", &n, &k);int i;memset(map, 0, sizeof(map));memset(res, 0, sizeof(res));int a, b, ans = 0;for(i = 0; i < k; i ++){scanf("%d%d", &a, &b);map[a].push_back(b);}for(i = 1; i <= n; i ++){memset(vis, 0,sizeof(vis));if(find(i)) ++ans;}printf("%d\n", ans);} return 0;
}
nyoj 239 月老的难题 【二分匹配之匈牙利】相关推荐
- nyoj 239 月老的难题
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=239 简单的二分匹配,不过这道题很怪,矩阵就是tle,临界表200多,很无语. 以前做个, ...
- NYOJ——239月老的难题(二分图最大匹配)
月老的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家, ...
- NYOJ 题目239 月老的难题 (二分图最大匹配-匈牙利算法模板)
月老的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一 ...
- NYOJ - 239 - 月老的难题 ( 二分图最大匹配 匈牙利算法 )
描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭. 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸 ...
- nyoj-239 月老的难题 (二分图匹配—匈牙利算法 网络流—Dinic算法)
月老的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一 ...
- 问题测试数据NYOJ 478 月老的难题 (1)解题报告
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 间时制限: 1000 ms | 存内制限: 65535 KB 难度: 3 月老近最遇到了 ...
- 二分匹配(匈牙利算法)
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...
- 二分匹配(匈牙利算法)模板
#include <iostream> #include <vector> using namespace std; #define MAX 1005vector< ve ...
- POJ1325二分匹配或者DINIC(最小路径覆盖)
题意: 有k个任务,两个机器,第一个机器有n个模式,第二个机器有m个模式,每个任务要么在第一个机器的一个模式下工作,要么在第二个机器的一个模式下工作,机器每切换一个模式需要重启一次,两个 ...
最新文章
- 全球及中国临床试验支持服务行业十四五规模发展及应用前景调研报告2022-2027年
- c程序内存分布[转载]
- BZOJ1725 牧场的安排
- JQuery------各种版本下载
- 詹金斯搭建_詹金斯的Maven报告
- iOS应用图片命名规则
- android百度地图单点定位_Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡...
- Yii 2.0 权威指南 (8) 配合数据库使用
- Python爬虫开源项目代码分享,100个
- Xshell 5 注册码
- 面试官问“你还有什么需要了解的吗”——应该这样回答
- root工具android10,KingRoot安卓10root工具 5.4.0最新版
- 硬件系统工程师需要具备哪些技能
- 如何给图片加水印?这三个图片加水印方法,帮你添加花式水印
- 怎样在表格中选出同一类_excel表格怎么将相同内容筛选出来
- 夏日炎炎玩转新加坡:盘点室内景点和夜游好去处
- 腾讯安全联合发布《2022游戏安全白皮书》:外挂对抗仍然激烈
- 数学建模美赛、国赛真题训练——滑雪场的设计(原创)
- 史元春和孙正兴:人机交互
- 自己部署 Docker Kong
热门文章
- 瓷砖铺贴方法_12种最好看的瓷砖铺贴方式!
- linux下Ubuntu交叉编译boost源码编译
- 京东云视频云全面支持AVS2标准
- 解决服务器报错java.nio.file.AccessDeniedException: /opt/jeecg-boot/upload
- 机器人学之动力学笔记【9】—— 牛顿-欧拉 递推动力学方程
- 头条/抖音小程序内容安全检测(违规词过滤)
- Linux系统编程——execl函数族
- 山经·南山经:堂庭山
- 智能眼镜是头戴式摄像机
- CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variabl