计蒜客-二分匹配习题 男女分组
来源:互联网 发布:淘宝云客服兼职 编辑:程序博客网 时间:2024/09/21 08:58
蒜头君带领 nn 位同学前去郊游,其中有 mm 位是女生。出发前,蒜头君想给大家分个组,一位男生和一位女生分一组,相互照顾的同时还能促进男女生之间的友谊。但是每位同学可能会有若干个可以分在一组的选择,他只想和这几位同学分在一组,并不会选择其他同学。这可是给蒜头君出了一道难题,他想请聪明的你来帮他算算,最多可以分成多少个组。输入格式第一行输入两个正整数 m,n(1≤m,n≤100)。代表一共有 n 位同学,其中 m 位是女生。女生的编号为 1⋯m;男生的编号为 m+1 ⋯n。接下来输入若干行,每行输入两个正整数 a 和 b,表示编号为 a 的同学和编号为 b 的同学愿意和对方分在一组。如果 a 和 b 都为 -1,则表示输入结束。输出格式输出最佳分组方案。第一行输出最多能分的组数 SS。接下来输出 S 行,每行输出两个正整数 a 和 b,表示编号为 a 的同学和编号为 b 的同学分在一组。a 和 b 不分前后顺序,任意输出皆可。如果没有解,即不能分组,则输出No Solution!。本题答案不唯一,符合要求的答案均正确样例输入5 204 141 113 114 84 181 19-1 -1样例输出31 193 114 14
#include<bits/stdc++.h>using namespace std;int lkd[201][201],book[201],lk[201];int n,m,ans=0;bool dfs(int u){ for(int i=1;i<=m;i++) { if(lkd[u][i]&&!book[i]) { book[i]=1; if(lk[i]==0||dfs(lk[i])) { lk[i]=u; return true; } } } return false;}int main(){ cin>>n>>m; //m位是女生 if(n==1){ cout<<"No Solution!";return 0;} int a,b; cin>>a>>b; while(a!=-1&&b!=-1){ lkd[a][b]=1; cin>>a>>b; } for(int i=1;i<=m;i++)//lkd的第一维表示女生 { memset(book,0,sizeof(book)); ans+=dfs(i); } cout<<ans<<endl; for(int i=1;i<=m;i++) { if(lk[i]!=0) cout<<lk[i]<<' '<<i<<endl; } return 0;}
//令人智熄 不输出无解也能过
阅读全文
0 0
- 计蒜客-二分匹配习题 男女分组
- hdu 2444The Accomodation of Students 二分匹配+dfs分组
- 男女稳定匹配问题——贪心
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 安装流行脚本编辑器(jupyter notebook)流程
- Shell脚本的基本语法(一) if判断、for循环、while循环和until循环
- 深度学习入门指北——从硬件到软件
- 【回顾】从零入门机器学习算法与实践
- 深度学习系列之二:卷积神经网络 | 公开课
- 计蒜客-二分匹配习题 男女分组
- 参数与非参数的机器学习算法
- 从getmemery()函数看内存管理、函数传参等一系列问题
- HDU 2097 Sky数(进制转换)
- mysql server for mac forget password
- 最长反链(bzoj 1143: [CTSC2008]祭祀river)
- 开源调度系统
- [DP 组合] BZOJ5004 & Hihocoder1075. 开锁魔法 III
- Windows下C++ 模拟键盘输入,鼠标点击,鼠标移动,获取句柄