bzoj 3816&&uoj #41. [清华集训2014]矩阵变换
稳定婚姻问题:
有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样、
将男生和女生两两配对,保证不会出现婚姻不稳定的问题。
即A-1,B-2 而A更喜欢2,2更喜欢A。
算法流程:
每次男生向自己未追求过的排名最高女生求婚。
然后每个有追求者的女生在自己现男友和追求者中选择一个最喜欢的接受,然后拒绝其他人。
算法一定可以结束。
因为如果最后有一个男生单身,那他一定把所有女生都追求过一遍,说明没有女生单身,产生矛盾。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define inf 0x3f3f3f3f
#define pb(x) push_back(x)
using namespace std;
int read()
{
char c=getchar();int p=0;
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')p=p*10+c-'0',c=getchar();
return p;
}
int n,m;
int map[205][405];
int man[205][205];
int wom[206][206];
int ok[205],ko[205];
int now[205];
int num;
vector<int>v[205];
void solve()
{
num=0;
memset(ko,0,sizeof(ko));
memset(ok,0,sizeof(ok));
memset(now,0,sizeof(now));
for(int i=1;i<=n;i++)now[i]=1;
while(num<n)
{
for(int i=1;i<=n;i++)
{
if(!ok[i])
{
v[man[i][now[i]]].pb(i);
now[i]++;
}
}
for(int i=1;i<=n;i++)
{
int mn=-1;
for(int j=0;j<v[i].size();j++)
{
if(mn==-1||wom[i][v[i][j]]<wom[i][mn])mn=v[i][j];
}
if(mn!=-1)
{
if(!ko[i]||wom[i][mn]<wom[i][ko[i]])
{
if(!ko[i])num++;
ok[ko[i]]=0;
ko[i]=mn;
ok[mn]=i;
}
}
v[i].clear();
}
}
for(int i=1;i<=n;i++)
{
printf("%d%c",ok[i]," \n"[i==n]);
}
puts("");
return ;
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
memset(map,0,sizeof(map));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
int cnt=0;
for(int j=1;j<=m;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]!=0)
{
man[i][++cnt]=map[i][j];
wom[map[i][j]][i]=m-j;
}
}
}
solve();
}
return 0;
}
bzoj 3816&&uoj #41. [清华集训2014]矩阵变换的更多相关文章
- UOJ.41.[清华集训2014]矩阵变换(稳定婚姻)
题目链接 稳定婚姻问题:有n个男生n个女生,每个男/女生对每个女/男生有一个不同的喜爱程度.给每个人选择配偶. 若不存在 x,y未匹配,且x喜欢y胜过喜欢x当前的配偶,y喜欢x也胜过y当前的配偶 的完 ...
- [BZOJ3816][清华集训2014]矩阵变换(稳定婚姻问题)
3816: 矩阵变换 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 803 Solved: 578[Submit][Status][Discuss] ...
- BZOJ 4732 UOJ #268 [清华集训2016]数据交互 (树链剖分、线段树)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4732 (UOJ) http://uoj.ac/problem/268 题解 ...
- uoj #46[清华集训2014]玄学
uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...
- uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题
[清华集训2014]矩阵变换 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...
- AC日记——【清华集训2014】奇数国 uoj 38
#38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...
- [UOJ#274][清华集训2016]温暖会指引我们前行
[UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...
- UOJ#46. 【清华集训2014】玄学
传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...
- bzoj 4736 /uoj274【清华集训2016】温暖会指引我们前行 lct
[清华集训2016]温暖会指引我们前行 统计 描述 提交 自定义测试 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了 ...
随机推荐
- VMware两台虚拟机之间文件共享
虚拟机A的文件拷贝到虚拟机B scp[参数][原路径][目标路径] eg: scp -r root@192.168.0.172:/home/rookie/下载/ /home/rooookie/下载/ ...
- django1.11入门
快速安装指南¶ 在使用Django之前,您需要安装它.我们有 完整的安装指南,涵盖所有可能性; 本指南将指导您进行简单,最小化的安装,在您完成介绍时可以正常工作. 安装Python¶ 作为一个Pyth ...
- more和less命令详解
基础命令学习目录首页 原文链接:https://www.cnblogs.com/aijianshi/p/5750911.html 一.more命令 more功能类似 cat ,cat命令是整个文件的内 ...
- resize2fs命令详解
基础命令学习目录首页 原文链接:http://blog.51cto.com/woyaoxuelinux/1870299 resize2fs:调整ext文件系统的空间大小 搭配逻辑卷lv使用方法: ...
- NodeJS http模块
Node.js提供了http模块,用于搭建HTTP服务端和客户端. 创建Web服务器 /** * node-http 服务端 */ let http = require('http'); let ur ...
- 关于手机端h5上传图片配合exif.min.js,processImg.js的使用
首先这里有个new FileReader()的概念,这是h5新增的,用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件 ...
- Daily Scrum (2015/10/28)
昨天DEV们完成了一部分代码风格的修整.今晚在与其他组进行交流时我们发现我们的代码是需要在服务器上运行的,而且服务器是需要配置的,而且据说需要花一些时间.所以在编写代码之前PM提出我们应该先把服务器搭 ...
- 《 Spring1之第二次站立会议(重发)》
< 第二次站立会议(重发)> 昨天,我把找到的代码和协议资料等相关资料在团队里做了相应的汇报: 今天,我对自己找到的代码进行了相关的了解后,把它们在编译环境中进行了编译以及接着对代码进行逐 ...
- 【转】常用jar包的作用了解
发项目的过程中,经常需要用到一写jar包,现在对其中的一写jar的作用,做下总结,也算是避免少引或者多引jar包吧,欢迎大家补充.谢谢. 1.apache的一写jar commons-collecti ...
- redis哨兵机制一(转)
概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如 master宕机了,Redis本身(包括它的很多客户端) ...