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系 ... 
随机推荐
- HTTP 基础
			HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ... 
- 博客(二)注册页面django
			首先上一个html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ... 
- XML 解析技术
			xml 解析方式有两种: dom 解析和 sax 解析: 针对着两种解析方式,有三种解析器: sun公司的 jaxp dom4j 组织的 dom4j jdom 组织的 jdom dom 解析XML : ... 
- HTML5拖拽事件笔记
			在HTML5的规范中,我们可以通过为元素增加`draggable="true"`来设置此元素是否可以进行拖拽操作,其中图片.链接默认是开启的. 1. 拖拽元素:设置了`dragga ... 
- visual studio build and rebuild 的区别
			build 只编译发生改变的dll, (如下, 我只修改了web API,build的时候, 只有webAPI.dll发生更新) rebuild = clean + build (如下, 本项目中dl ... 
- Android:webView加载h5网页视频,播放不了,以及横屏全屏的问题和实现自定义加载进度条的效果
			1.webView加载h5网页视频,播放不了,android3.0之后要在menifest添加硬件加速的属性 android:hardwareAccelerated="true". ... 
- Linux配置Nginx负载均衡
			nginx配置负载均衡其实很简单,一直还以为负载均衡是个很高端人士玩的 首先先了解下负载均衡,假设一个场景,如果有1000个客户同时访问你服务器时,而你只有一台服务器的Nginx,且只有一个MySQL ... 
- 微信小程序中用setData修改一个对象的属性值
			原创文章 1. Page({ data: { items:{ //items为一个对象,is_like和like分别为其两个属性 is_like: 0, like: 0 ... 
- Non-negative Integers without Consecutive Ones
			n位二进制,求不包含连续1的二进制(n位)数字个数. http://www.geeksforgeeks.org/count-number-binary-strings-without-consecut ... 
- JAVA虚拟机是?为什么称作是“平台无关的语言”?
			Java虚拟机(Java Virtual Machine)简称JVM ,它是抽象化的计算机,有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与具体操作系统平台相关的信 ... 
