【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题
题目描述
给出一个\(n\)行\(m\)列的矩阵\(A\), 保证满足以下性质:
1.\(m>n\)。
2.矩阵中每个数都是\([0,n]\)中的自然数。
3.每行中,\([1,n]\)中每个自然数都恰好出现一次。这意味着每行中\(0\)恰好出现\(m−n\)次。
4. 每列中,\([1,n]\)中每个自然数至多出现一次。
现在我们要在每行中选取一个非零数,并把这个数之后的数赋值为这个数。我们希望保持上面的性质4,即每列中,\([1,n]\)中每个自然数仍然至多出现一次。
\(n\leq 200,m\leq 400\)
题解
建立稳定婚姻问题的模型。
把行看成男士,把数看成女士。每行喜欢出现靠左的数,每个数喜欢出现位置(这个数在这行中出现的位置)靠右的行。
为什么这样一定合法?
假设有这样的情况:
y:~~~~~u~~~~~~~~vvvvv
\]
那么在第\(y\)行中,\(y\)会更喜欢\(u\)(因为比\(v\)出现位置靠左)。\(u\)也会更喜欢\(y\)(因为出现位置靠右),那么就不是一个合法解。
其实比读入还快。
时间复杂度:\(O(nm)\)
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
#include<queue>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
void rd(int &s)
{
int c;
while((c=getchar())<'0'||c>'9');
s=c-'0';
while((c=getchar())>='0'&&c<='9')
s=s*10+c-'0';
}
int a[210][410];
int n,m;
int b[210][210];
int now[210];
int c[210][210];
int d[210];
queue<int> q;
void solve()
{
// scanf("%d%d",&n,&m);
rd(n);
rd(m);
int i,j;
memset(now,0,sizeof now);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
// scanf("%d",&a[i][j]);
rd(a[i][j]);
if(a[i][j])
{
b[i][++now[i]]=a[i][j];
c[a[i][j]][i]=j;
}
}
for(i=1;i<=n;i++)
{
q.push(i);
now[i]=1;
}
memset(d,0,sizeof d);
while(!q.empty())
{
int x=q.front();
q.pop();
int v=b[x][now[x]];
if(d[v]&&c[v][x]<c[v][d[v]])
{
now[x]++;
q.push(x);
}
else
{
if(d[v])
q.push(d[v]);
d[v]=x;
}
}
for(i=1;i<=n;i++)
printf("%d ",b[i][now[i]]);
printf("\n");
}
int main()
{
freopen("d2t3.in","r",stdin);
freopen("d2t3.out","w",stdout);
int t;
// scanf("%d",&t);
rd(t);
while(t--)
solve();
return 0;
}
【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题的更多相关文章
- [BZOJ3816][清华集训2014]矩阵变换(稳定婚姻问题)
3816: 矩阵变换 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 803 Solved: 578[Submit][Status][Discuss] ...
- UOJ.41.[清华集训2014]矩阵变换(稳定婚姻)
题目链接 稳定婚姻问题:有n个男生n个女生,每个男/女生对每个女/男生有一个不同的喜爱程度.给每个人选择配偶. 若不存在 x,y未匹配,且x喜欢y胜过喜欢x当前的配偶,y喜欢x也胜过y当前的配偶 的完 ...
- bzoj 3816&&uoj #41. [清华集训2014]矩阵变换
稳定婚姻问题: 有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样. 将男生和女生两两配对,保证不会出现婚姻不稳定的问题. 即A-1,B-2 而A更喜欢2,2更喜欢A. 算法流程: 每次男 ...
- 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)即可: 除一个数等同于在模的意义下乘 ...
- [清华集训2015 Day2]矩阵变换-[稳定婚姻模型]
Description 给出一个N行M列的矩阵,保证满足以下性质: M>N. 矩阵中每个数都是 [0,N]中的自然数. 每行中, [1,N]中每个自然数刚好出现一次,其余的都是0. 每列中,[1 ...
- [UOJ 41]【清华集训2014】矩阵变换
Description 给出一个 $N$ 行 $M$ 列的矩阵A, 保证满足以下性质: $M > N$. 矩阵中每个数都是 $[0, N]$ 中的自然数. 每行中, $[1, N]$ 中每个自然 ...
- UOJ#46. 【清华集训2014】玄学
传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...
- 清华集训2014 sum
清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...
随机推荐
- Python学习第九篇——while和for的区别
pets = ['dog','cat','dog','goldfish','cat','rabbit','cat'] print(pets) for pet in pets: print(pet) # ...
- python中换行,'\r','\n'及'、'\r\n'
'\r'的本意是回到行首,'\n'的本意是换行. 所以回车相当于做的是'\r\n'或者'\n\r'.'\r'就是换行并回行首, '\n'就是换行并回行首,用'\r\n'表示换行并回行首. window ...
- 模拟银行ATM系统(基础版)
Account类 package ATM; public class Account {//定义Account类 private String accountID;//用于存储学生的用户账号(由八位数 ...
- 几个jdbc小技巧
版本:jdk:1.6mysql-connector-5.0.8 1.如何用jdbc判断某个基本表是否存在 一种比较“笨”的方法: try{ stmt.executeQuery( ...
- jupyter使用
jupyter使用 安装 在anaconda3的安装路径中,尽量避免使用汉字或者括号. 启动 在Windows上正确安装Anaconda3,确认配置好环境变量,然后再命令行中输入jupyter not ...
- Python之字符串操作
一.字符串特点 内容不可修改 password=' #内容不可修改 二.字符串常用方法 1..strip()方法 去字符串两边的空格和换行符 print(password.strip()) #去掉字符 ...
- Alibaba Cloud Toolkit for Eclipse & ECS、EDAS 或容器服务 Kubernetes
UserGuide_V2.1.0http://toolkit.aliyun.com/eclipse/?spm=5176.2020520130.105.3.3c3b697bOHma9f&msct ...
- 1170 - BLOB/TEXT column 'CustomerName' used in key specification without a key length
[DTF] Data Transfer 企管宝_2_CRM start[DTF] Getting tables[DTF] Analyzing table: `CustomerInfo`[DTF] Ge ...
- MyEclipse配置tomcat报错 - java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported major.minor version 51.0
1 开发Servlet程序时,MyEclipse配置好tomcat与JDK之后,启动时控制台报下列错误: 1 java.lang.UnsupportedClassVersionError: org/a ...
- [转帖]cnblog 新闻 : 亚太云计算市场报告:腾讯位列前五 份额首超谷歌
亚太云计算市场报告:腾讯位列前五 份额首超谷歌 投递人 itwriter 发布于 2019-03-18 12:06 评论(1) 有213人阅读 原文链接 [收藏] « » 美国市场研究机构 Syner ...