「Codeforces 1131D」Gourmet Choice
Description
美食家 Apple 先生是一家美食杂志的主编。他会用一个正整数来评价每一道菜。
美食家在第一天品尝第 $n$ 道菜,第二天品尝了 $m$ 道菜。他制作了一张 $n\times m$ 的表格,记录了他对菜肴的评价。如果第一套中的第 $i$ 道菜比第二套中的第 $j$ 道菜好,那么 $a_{i,j}$ 等于 `>`;如果要差,那么 $a_{i,j}$ 等于 `<`。菜肴可能同样美味,那么 $a_{i,j}$ 等于 `=`。
现在 Apple 先生想让你帮他评价每道菜。由于他是非常严格的,他会对菜肴进行评估,以便使用的最大整数尽可能小。但是 Apple 先生也很公平,如果 $a_{i,j}$ 为 `<`,那么给第一套中第 $i$ 道菜的评价一定小于第二套中第 $j$ 道菜。如果 $a_{i,j}$ 是 `>` 那么应该要更大。如果 $a_{i,j}$ 为 `=`,那么这两个数字要相等。
帮助 Apple 先生评价这两套中的每一道菜,使之符合他的感受,并满足最大数字尽可能小。如果有解则输出 `Yes` 和评价的数字;否则输出 `No`。
数据范围:$1\le n,m\le 10^3$。
首先我们把 = 给处理掉,把所有相等的点缩在一起。如果同一个并查集中的点有 < 或 > 关系显然无解。
此时我们得到了一个有向图,直接对它拓扑排序,如果有环则无解,否则输出方案。
const int N = 2e3 + 10;
vector<int>e[N];
string s[N];
int f[N], p[N], d[N];
int find(int x) {return x == f[x] ? x : f[x] = find(f[x]);}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, m;
cin >> n >> m;
for (int i = 0; i < n; ++i) cin >> s[i];
for (int i = 0; i < n + m + 1; ++i) f[i] = i;
for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j)
if (s[i][j] == '=') {
int u = find(i), v = find(n + j);
f[u] = v;
}
for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j)
if (s[i][j] != '=') {
int u = find(i), v = find(n + j);
if (s[i][j] == '<') {
e[u].push_back(v);
d[v] += 1;
} else {
e[v].push_back(u);
d[u] += 1;
}
}
queue<int>q;
for (int i = 0; i < n + m; ++i) if (find(i) == i and !d[i])q.push(i), p[i] = 1;
while (!q.empty()) {
int u = q.front(); q.pop();
for (int v : e[u])
if (!(--d[v])) {
q.push(v);
p[v] = p[u] + 1;
}
}
for (int i = 0; i < n + m; ++i) if (!(p[i] = p[find(i)])) {cout << "No\n"; return 0;}
cout << "Yes\n";
for (int i = 0; i < n; ++i) cout << p[i] << " \n"[i == n - 1];
for (int i = 0; i < m; ++i) cout << p[i + n] << " ";
}
「Codeforces 1131D」Gourmet Choice的更多相关文章
- codeforces #541 D. Gourmet choice(拓扑+并查集)
Mr. Apple, a gourmet, works as editor-in-chief of a gastronomic periodical. He travels around the wo ...
- 「CodeForces 581D」Three Logos
BUPT 2017 Summer Training (for 16) #3A 题意 给你三个矩形,需要不重叠不留空地组成一个正方形.不存在输出-1,否则输出边长和这个正方形(A,B,C表示三个不同矩形 ...
- 「CodeForces - 50C 」Happy Farm 5 (几何)
BUPT 2017 summer training (16) #2B 题意 有一些二维直角坐标系上的整数坐标的点,找出严格包含这些点的只能八个方向走出来步数最少的路径,输出最少步数. 题解 这题要求严 ...
- 「CodeForces - 598B」Queries on a String
BUPT 2017 summer training (for 16) #1I 题意 字符串s(1 ≤ |s| ≤ 10 000),有m(1 ≤ m ≤ 300)次操作,每次给l,r,k,代表将r位置插 ...
- 「CodeForces - 717E」Paint it really, really dark gray (dfs)
BUPT 2017 summer training (for 16) #1H 题意 每个节点是黑色or白色,经过一个节点就会改变它的颜色,一开始在1节点.求一条路径使得所有点变成黑色. 题解 dfs时 ...
- 「CodeForces 476A」Dreamoon and Stairs
Dreamoon and Stairs 题意翻译 题面 DM小朋友想要上一个有 \(n\) 级台阶的楼梯.他每一步可以上 \(1\) 或 \(2\) 级台阶.假设他走上这个台阶一共用了 \(x\) 步 ...
- 「CodeForces 546B」Soldier and Badges 解题报告
CF546B Soldier and Badges 题意翻译 给 n 个数,每次操作可以将一个数 +1,要使这 n 个数都不相同, 求最少要加多少? \(1 \le n \le 3000\) 感谢@凉 ...
- 「Codeforces 79D」Password
Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...
- 「Codeforces 468C」Hack it!
Description 定义 \(f(x)\) 表示 \(x\) 的各个数位之和.现在要求 \(\sum_{i=l}^rf(i)\bmod a\). 显然 ans=solve(l,r)%a; if(a ...
- 「Codeforces 724F」Uniformly Branched Trees
题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...
随机推荐
- cyclone3内部资源
CycloneIII内部资源概述 目录 CycloneIII内部资源概述 Logic Elements and Logic Array Blocks(逻辑元件和逻辑阵列块) LE LAB LAB In ...
- 无序对的GCD
求\(\sum_{i = 1}^n \sum_{j = i+1}^n GCD(a_i, a_j)\) \(N\)为上确界,\(n\)为\(a\)数组元素个数,\(D\)为约数个数. 方法一 \(1.\ ...
- Winform 控件库 MaterialSkin.2 使用教程(鸿蒙字体版)
️MaterialSkin.2 控件库在之前的文章中已经介绍过了,就不啰嗦了 - > Winform 好看控件库推荐:MaterialSkin.2 ️官方库里使用的是 Google 的 Robo ...
- PTA数组及排序查找题解与解题思路
PTA数组及排序查找题解与解题思路 函数题目 函数题目为平台提供的裁判程序调用所完成的函数进行判题,题目规定语言为C语言 6-1 求出二维数组的最大元素及其所在的坐标 本题较为简单,考察的是如何遍历一 ...
- XILINX HLS 入坑记录 之 写RAM 综合出 读取+写入Ram
最近使用 Xilinx HLS 来开发 算法的IPcore,使用的Vitis 2021,发现光是 EDA 工具就存在很多的bug,比如: 1.经常C综合 停留在 Using flow_target ' ...
- RV1126 分区教程
一.前言 期初我是想弄一个分区存放自己的 APP 程序,如果需要更改应用的时候,只需要烧写独立的分区即可,就不需要重新烧写 rootfs.这是一个简单的操作,为啥还需要记录了,因为我在里面遇到了一些坑 ...
- Linux磁盘专题-linux文件系统详解
这可是我几年前的杰作笔记呀.....当初手写计算都会,现在忘光光.... 物理硬盘Block的概念和作用 硬盘底层一次IO就是读.写一次扇区,一个扇区默认是512Byte. 读写大量文件如果以扇区为单 ...
- 【docker】docker中装Redis集群
一.搭建步骤 1.启动容器 #关闭防火墙 systemctl start docker 2.新建6个docker容器redis实例 docker run -d --name redis-node-1 ...
- SQL优化三步曲
有一天开发同学反馈线上业务库中有一条SQL执行很满,每次几乎要跑1分钟才结束,希望我们帮忙优化一下,具体SQL如下: SQL优化第一步 - 查看执行计划 对于一个SQL的优化,我们的第一步也是最重要的 ...
- elasticsearch oom问题分析
背景 线上发现elasticsearch集群状态red,并且有个es节点jvm内存使用不断升高,直到gc后依然内存不够使用,服务停止.查看日志,elasticsearch出现OOM报错. [2023- ...