Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
https://codeforces.com/contest/1131/problem/D
题意
给你一个n*m二维偏序表,代表x[i]和y[j]的大小关系,根据表构造大小分别为n,m的x[],y[],使得两个数组中最大的数尽量小
题解
- 按照偏序表,构造出从小到大的拓扑图
- 如何解决相等的数的偏序关系?
- 用并查集缩点后再进行拓扑排序
- 如何解决最大的数最小?
- 只需要使得同一层的数相同就行,可以一批处理栈中的元素,对于一批栈中的元素产生的新点,先放进一个容器里,然后等到这批栈清空了,再把这个容器中的点放进栈中
坑点
- 需要标记已经进栈的并查集,防止同一个并查集重复进栈
代码
#include<bits/stdc++.h>
#define M 4005
using namespace std;
int n,m,i,j,in[M],u,v,c[M],cnt;
char s[M][M];
stack<int>S;
queue<int>Q;
vector<int>g[M];
int fa[M];int fin(int u){return fa[u]==u?u:fa[u]=fin(fa[u]);}
void merge(int u,int v){
int x=fin(u),y=fin(v);
if(x!=y)fa[x]=y;
}
int main(){
cin>>n>>m;
for(i=1;i<=n+m;i++)fa[i]=i;
for(i=1;i<=n;i++)scanf("%s",s[i]+1);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(s[i][j]=='='){
merge(i,j+n);
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
u=fin(i);v=fin(j+n);
if(s[i][j]=='>'){
in[u]++;g[v].push_back(u);
}else if(s[i][j]=='<'){
in[v]++;g[u].push_back(v);
}
}
}
cnt++;
for(i=1;i<=n+m;i++){
u=fin(i);
if(in[u]==0&&!c[u]){
S.push(u);
c[u]=cnt;
}
}
while(!S.empty()||!Q.empty()){
if(!S.empty()){
u=S.top();S.pop();
for(i=0;i<g[u].size();i++){
v=g[u][i];in[v]--;
if(in[v]==0){
Q.push(v);
}
}
}else{
cnt++;
while(!Q.empty()){
u=Q.front();Q.pop();
c[u]=cnt;S.push(u);
//cout<<u<<" "<<c[u]<<endl;
}
}
}
for(i=1;i<=n+m;i++){
u=fin(i);
if(in[u]>0){cout<<"No";return 0;}
}
cout<<"Yes"<<endl;
for(i=1;i<=n+m;i++){
u=fin(i);
cout<<c[u]<<" ";
if(i==n)cout<<endl;
}
}
Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序的更多相关文章
- Codeforces Round #376 (Div. 2) C. Socks---并查集+贪心
题目链接:http://codeforces.com/problemset/problem/731/C 题意:有n只袜子,每只都有一个颜色,现在他的妈妈要去出差m天,然后让他每天穿第 L 和第 R 只 ...
- Codeforces Round #286 (Div. 2) B 并查集
B. Mr. Kitayuta's Colorful Graph time limit per test 1 second memory limit per test 256 megabytes in ...
- Codeforces Round #292 (Div. 1) B. Drazil and Tiles 拓扑排序
B. Drazil and Tiles 题目连接: http://codeforces.com/contest/516/problem/B Description Drazil created a f ...
- Codeforces Round #285 (Div. 1) A. Misha and Forest 拓扑排序
题目链接: 题目 A. Misha and Forest time limit per test 1 second memory limit per test 256 megabytes 问题描述 L ...
- Codeforces Round #292 (Div. 2) D. Drazil and Tiles [拓扑排序 dfs]
传送门 D. Drazil and Tiles time limit per test 2 seconds memory limit per test 256 megabytes Drazil cre ...
- Codeforces Round #660 (Div. 2) Captain Flint and Treasure 拓扑排序(按照出度、入读两边拓扑排序)
题目链接:Captain Flint and Treasure 题意: 一种操作为 选一个下标 使得ans+=a[i] 且 把a[b[i]]+a[i] 要求每个下标都进行一种这样的操作,问怎么样的 ...
- Codeforces Round #541 (Div. 2)
Codeforces Round #541 (Div. 2) http://codeforces.com/contest/1131 A #include<bits/stdc++.h> us ...
- 并查集+拓扑排序 赛码 1009 Exploration
题目传送门 /* 题意:无向图和有向图的混合图判环: 官方题解:首先对于所有的无向边,我们使用并查集将两边的点并起来,若一条边未合并之前, 两端的点已经处于同一个集合了,那么说明必定存在可行的环(因为 ...
- HDU 1811:Rank of Tetris(并查集+拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description 自从Lele开发了Rating系 ...
随机推荐
- HandlerMapping和HandlerAdapter配置须知
---------------------siwuxie095 HandlerMapping 和 HandlerAdapter 配置须知 ...
- Bootstrap(6)辅组类和响应式工具
一.辅助类 Bootstrap 在布局方面提供了一些细小的辅组样式,用于文字颜色以及背景色的设置.显示关闭图标等等. 1.情景文本颜色 各种色调的字体 <p class="text-m ...
- 将之前的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。
之前的文章 示例代码如下 assume cs:codesg ;将整个data段看作是一个数组,长度一共为 ;21*4+21*4+2*21=168+42=210字节 data segment db ' ...
- Sqlserver的身份验证模式
1.服务器名称: . 在服务器名称这里,我们有以下几种选择来连接到本地: (1)默认的服务器名称:也就是电脑主机的名称 (2)".",“.”就表示主机. (3)localhost ...
- vmware磁盘空间扩展
往vmware虚拟机中导入数据库或者文件以后经常出现磁盘空间不够用.这个时候就需要扩展一下磁盘的大小. 笔者本来60G,现在想扩展到100G 命令如下 D:\Program Files (x86)\V ...
- JS正则表达式验证是否为11位有效手机号码
function isPoneAvailable($poneInput) { var myreg=/^[1][3,4,5,7,8][0-9]{9}$/; if (!myreg.test($poneIn ...
- overflow 在float浮动标签里的作用
overflow可以使浮动元素回归文档流,但是浮动元素却仍然具有浮动的属性 <!DOCTYPE html> <html lang="en"> <hea ...
- 日期控件 DatePicker 在ie8不能用
过个年,日期控件DatePicker在ie8下突然不能用了,程序也没升级,很是奇怪. 把ie8的“禁用脚本调试”去掉,再次运行,发现提示有脚本错误. 想着可能是兼容性问题,于是把兼容性视图打开运行,还 ...
- css font-size=0的妙用
转自:css font-size=0有什么妙用? 回答一: 问题的根源是 inline(a标签默认是display:inline) 和 inline-block (.list-info 设置的是 di ...
- slam14讲证明构成李代数