CF#541 D. Gourmet choice /// BFS 拓扑
题目大意:
给定n m 第一行有n个数 第二行有m个数
接下来n行每行m列 有 = < >
位于 i j 的符号表示 第一行第i个数与第二行第j个数的大小关系
1.将n+m个数 当做按顺序编号的点
则第二行的数是编号为 n+j 的点
2.先处理=的数 将所有=的数指向同一个父亲
3.再处理不是=的数
找到两者的父亲
如果父亲相同说明两者= 与目前处理的情况相悖 无解
否则 按由小到大的关系在两者(的父亲)间连单向边(小连向大) 此时较大的点入度+1
4.此时查看所有点的入度
入度为0 说明这个点是所有数中最小的数
将它们的答案设为1 放进队列
5.广搜 取出队列里的点
判断是否能去向下一个点 能到的点数值比当前点大
所以 它们的答案 是 当前点的答案+1
6.查看对应点的答案 应该查询 这个点的父亲(数值相等) 的答案
因为连边时 实际上是在对应点的父亲之间连的边
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
const int N=1e3+;
const int NN=N<<;
const int mod=1e9+; int n, m;
char G[N][N];
int E[NN][NN];
int du[NN], ans[NN];
int fa[NN];
int getfa(int x) {
if(fa[x]==x) return x;
else return fa[x]=getfa(fa[x]);
}
int main()
{
while(~scanf("%d%d",&n,&m)) {
inc(i,,n) scanf("%s",G[i]+);
inc(i,,n+m) fa[i]=i;
inc(i,,n) inc(j,,m) // 第二行的编号为n+j
if(G[i][j]=='=') fa[getfa(i)]=getfa(n+j);
// 相等的连到同一个父亲
bool OK=; mem(E,); mem(du,);
inc(i,,n) inc(j,,m)
if(G[i][j]!='=') {
int fi=getfa(i), fj=getfa(n+j);
// 父亲相同说明相等 但此时是不等的情况 则无解
if(fi==fj) OK=;
else {
if(G[i][j]=='<'&&E[fi][fj]==)
E[fi][fj]=, du[fj]++;
else if(G[i][j]=='>'&&E[fj][fi]==)
E[fj][fi]=, du[fi]++;
} // 由小向大连边 并计算点的入度
}
if(OK==) { puts("No"); continue; }
queue<int>q;
inc(i,,n+m) // 入度为0说明是最小的
if(du[i]==) q.push(i), ans[i]=;
while(!q.empty()) {
int u=q.front(); q.pop();
inc(i,,n+m)
if(E[u][i] && --du[i]==) // 入度减1 即去掉u点
q.push(i), ans[i]=ans[u]+;
// 入度减为0说明没有比他更小的了
}
inc(i,,n+m) if(du[i]) OK=;
if(OK==) { puts("No"); continue; }
puts("Yes");
inc(i,,n) printf("%d ",ans[getfa(i)]); printf("\n");
inc(i,,m) printf("%d ",ans[getfa(n+i)]); printf("\n");
} return ;
}
CF#541 D. Gourmet choice /// BFS 拓扑的更多相关文章
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
- codeforces #541 D. Gourmet choice(拓扑+并查集)
Mr. Apple, a gourmet, works as editor-in-chief of a gastronomic periodical. He travels around the wo ...
- CF - 1131 D Gourmet choice
题目传送门 先把 = 的人用并查集合并在一起. 然后 < > 的建边, 跑一遍 toposort 之后就好了. 入度为0点的值肯定为1, 然后就是因为这个是按照时间线走过来的,所以一个点的 ...
- D. Gourmet choice并查集,拓扑结构
D. Gourmet choice time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- coderfoces D. Gourmet choice
D. Gourmet choice time limit per test 2 seconds memory limit per test 256 megabytes 题目链接: https: ...
- 【CF #541 D】 Gourmet choice
link:https://codeforces.com/contest/1131 题意: 给定一些大小比较,输出排名. 思路: 这道题我用的是拓扑排序,又因为有等于号的存在,我用了并查集. 结束后这道 ...
- CF1131D Gourmet choice(并查集,拓扑排序)
这题CF给的难度是2000,但我感觉没这么高啊…… 题目链接:CF原网 题目大意:有两个正整数序列 $a,b$,长度分别为 $n,m$.给出所有 $a_i$ 和 $b_j(1\le i\le n,1\ ...
- CF #375 (Div. 2) D. bfs
1.CF #375 (Div. 2) D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...
- CF 520 B. Two Buttons(bfs)
/*题意:一个数,就是输入的第一个数,让它变成第二个数最少用几步.可以点红色按钮,蓝色按钮来改变数字,红色:*2,蓝色:-1,如果变成负数,就变成原来的数.CF 520 B. Two Buttons思 ...
随机推荐
- ajaxfileupload上传文件出现SyntaxError:unexpected token <错误
function ajaxFileUpload() { $.ajaxFileUpload ( { url: uri, secureuri: false, fileElementId: 'upFile' ...
- Django 模型层关系映射
一.一对一映射 1.什么是一对一 A表中的一条记录只能与B表中的一条记录相关联如:一夫一妻制 2.语法 允许在关联的两个类的任何一个类中 增加: 属性 = models.OneToOneField(E ...
- mysql 密码
http://www.cnblogs.com/jonsea/p/5510219.html character-set-server=utf8 mysql 修改密码: ALTER USER 'root' ...
- Mysql 生成随机数字
其实思路很简单,利用MySQL现有的函数,然后进行加工处理,达到预期的结果.可以用到的MySQL函数为rand() ,以及 round() 函数. 具体为:select round(rand()*10 ...
- Mybatis中#{}与${}的使用
含义 #{}:为占位符 ${}:为拼接符 区别: 用法 #{}:为参数占位符?,即sql预编译 ${}为字符串替换, 即字符串拼接 执行流程 #{}:动态解析 --> 预编译 - ...
- OpenSuSe开启sshd服务
需要测试OpenSuSE11 x64上mysql性能,发现很多东西与centos以及红帽有差别.其中最切身的就是sshd服务的开启. 安装好OpenSuSE 11后,发现ssh连接不上去,可以ping ...
- java final关键字详解
final是java中保留关键字,可以声明成员变量.类.方法与本地变量,一旦引用final关键字,将不能再改变这个引用,编译器会检查代码,要是想改变该引用,会报错. final变量? 凡是对成员变量或 ...
- LeetCode Array Easy 26.Remove Duplicates from Sorted Array 解答及疑惑
Description Given a sorted array nums, remove the duplicates in-place such that each element appear ...
- teb教程7
融合自定义的障碍物 简介:本部分讲解怎样考虑其他节点发布的多边形的障碍物. 1.在一些应用当中,可能不想依赖于代价地图或者想添加其他的除了点状的障碍物.你可以发送你自己的障碍物列表到teb_local ...
- JS window对象 screen对象 screen对象用于获取用户的屏幕信息。 语法: window.screen.属性
screen对象 screen对象用于获取用户的屏幕信息. 语法: window.screen.属性 对象属性: