【XSY1287】【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题
来源:互联网 发布:数据抓取工具 编辑:程序博客网 时间:2024/06/06 03:21
题目描述
给出一个
1.
2.矩阵中每个数都是
3.每行中,
4. 每列中,
现在我们要在每行中选取一个非零数,并把这个数之后的数赋值为这个数。我们希望保持上面的性质4,即每列中,
题解
建立稳定婚姻问题的模型。
把行看成男士,把数看成女士。每行喜欢出现靠左的数,每个数喜欢出现位置(这个数在这行中出现的位置)靠右的行。
为什么这样一定合法?
假设有这样的情况:
那么在第
其实比读入还快。
时间复杂度:
代码
#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;}
阅读全文
0 0
- 【XSY1287】【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题
- BZOJ3816矩阵变换
- 稳定婚姻问题
- 稳定婚姻问题算法
- 稳定婚姻问题
- poj3487 稳定婚姻问题
- 关于稳定婚姻问题
- 【稳定婚姻问题】
- 稳定婚姻问题
- 稳定婚姻问题
- 稳定婚姻问题
- 稳定婚姻问题算法
- 稳定婚姻问题
- 稳定婚姻问题
- 稳定婚姻问题
- hdu1914 稳定婚姻问题
- hdu1435 稳定婚姻问题
- 稳定婚姻问题
- python密码密文输入
- python的分支结构和循环结构
- POJ 3276 Face The Right Way 笔记
- python中的bates类型
- python中的元组和列表操作
- 【XSY1287】【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题
- 【Java笔记】Week02 -- JavaSE基础语法、OOP基础知识
- 所谓的 突然发病,其实是被卫星穿墙攻击,骗人钱财和良心医疗和骗人服药,其实吃饭菜就会好的。
- python中的字符串操作
- python中的字典操作
- POJ 3279 Fliptile 笔记
- python中的集合
- 【HDU 1004】 Let the Balloon Rise
- python文件操作