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系 ...
随机推荐
- 明明白白你的Linux服务器——日志篇
日志对于安全来说,非常重要,它记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹.日志主要的功能有:审计和监测.他还可以实时的监测系统状态,监测和追踪 ...
- Python: Tkinter、ttk编程之计算器
起源: 研究Python UI编程,我偏喜欢其原生组件,于是学习Tkinter.ttk组件用法.找一计算器开源代码,略加修整,以为备忘.其界面如图所示: 1.源代码(Python 2.7): # en ...
- JS 获取屏幕的宽度和高度,各种方式
Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document ...
- iOS 集成极光推送
最近极光推送更新到V3版本之后,推送又不成功!配合服务器联调了半天,发现是服务器环境配置有问题. 想着就把极光推送的步骤给记录下来. 一.配置push证书 这个可以到极光文档里写,很详细 二.导入必要 ...
- go语言中的方法method
package main; import "fmt" //重新定义一个类型 //为该INT类型扩展方法 type INT int; type A struct { name str ...
- 8I - 吃糖果
HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样:可是Gardon不知道是否存在一种吃 ...
- android--Activity有返回值的跳转
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...
- mtcp的快速编译(连接)
mtcp的快速编译 http://mos.kaist.edu/guide/config/03_build_mtcp.html 介绍DPDK中使用mtcp的文档 https://dpdksummit.c ...
- Codeforces 545E. Paths and Trees 最短路
E. Paths and Trees time limit per test: 3 seconds memory limit per test: 256 megabytes input: standa ...
- 谁说delphi没有IOCP库,delphi新的IOCP类库,开源中
DIOCP Demo说明 下载地址 https://code.google.com/p/diocp/ 特地为DIOCP开设了一个群:320641073,欢迎学习的IOCP的童鞋进入讨论. 核心作者: ...