题目本质:形成一个拓扑图,不应带自环。

解决方法:

1.先把等于号的部分用dsu缩点;

2.大于和小于号建立拓扑关系;

3.n*m的矩阵,只要用标号n+j代表m集合的第j个就从二维降到一维了;

4.dfs查有没有环:used == 2的那种环是合法的!

 void dfs(int i) {
used[i] = ;
for (int s : v[i]) {
if (used[s] == ) {
puts("No");
exit();
}
if (!used[s]) dfs(s);
}
used[i] = ;
order.push_back(i);
}

5.按照order记录的拓扑顺序自底向上dp一下最小取值。

总代码:

 #pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cctype>
#include <climits>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <string>
#include <sstream>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <list>
#include <fstream>
#define ri readint()
#define gc getchar()
#define R(x) scanf("%d", &x)
#define W(x) printf("%d\n", x)
#define init(a, b) memset(a, b, sizeof(a))
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define irep(i, a, b) for (int i = a; i >= b; i--)
#define ls p << 1
#define rs p << 1 | 1
using namespace std; typedef double db;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> P;
const int inf = 0x3f3f3f3f;
const ll INF = 1e18; inline int readint() {
int x = , s = , c = gc;
while (c <= ) c = gc;
if (c == '-') s = -, c = gc;
for (; isdigit(c); c = gc)
x = x * + c - ;
return x * s;
} const int maxn = 1e3 + ;
int n, m;
int value[maxn << ];
int used[maxn << ];
int fa[maxn << ];
char cmp[maxn][maxn];
vector<int> v[maxn << ], order; int getf(int v) {
return v == fa[v] ? v : fa[v] = getf(fa[v]);
} void merge(int x, int y) {
int p = getf(x), t = getf(y);
fa[p] = t;
} void dfs(int i) {
used[i] = ;
for (int s : v[i]) {
if (used[s] == ) {
puts("No");
exit();
}
if (!used[s]) dfs(s);
}
used[i] = ;
order.push_back(i);
} int main() {
ios_base::sync_with_stdio(false);
cin.tie(); cin >> n >> m;
rep(i, , n + m) {
fa[i] = i;
} rep(i, , n) {
rep(j, , m) {
cin >> cmp[i][j];
if (cmp[i][j] == '=') {
merge(i, n + j);
}
}
} rep(i, , n) {
rep(j, , m) {
int x = getf(i), y = getf(n + j);
if (cmp[i][j] == '>') {
v[x].push_back(y);
} else if (cmp[i][j] == '<') {
v[y].push_back(x);
}
}
} rep(i, , n + m) {
if (fa[i] != i)
continue;
if (!used[i]) {
dfs(i);
}
}
for (int i : order) {
int val = ;
for (int j : v[i]) {
val = max(val, value[j]);
}
value[i] = val + ;
} cout << "Yes\n";
rep(i, , n) {
cout << value[getf(i)] << " ";
}
cout << endl;
rep(i, , m) {
cout << value[getf(n + i)] << " ";
}
return ;
}

CF #541div2 D的更多相关文章

  1. CF #541div2 F

    题目本质:并查集的链式合并 解决方法1: 类似哈夫曼树,叶节点们为真点,其余造一些虚的父节点,使得dfs这棵树的时候,先进行并查合并的点一定是兄弟节点因而紧挨着被输出,巧妙达到了效果. #pragma ...

  2. CF #541div2 E

    题目本质:忽略串的变化,只记载26个字母的相关变化. 解决方法: 在上一次与本次的转移过程中,情况并不多,主要取决于本次串的首尾字母,若不是本次的首尾字母,会被置1:如果是的话,分情况接一下并更新.另 ...

  3. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  6. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  7. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  8. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  9. CF memsql Start[c]UP 2.0 B

    CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...

随机推荐

  1. ubuntu安装ros indigo

    版本是14.04.1 一.先配置 1.点击新立得软件包管理器,输入密码exbot123, 2,点击最上面一栏的设置,选择软件源,前四个打勾,后一个不打,把sevice america改成mainsev ...

  2. [RK3288][Android6.0] 调试笔记 --- 移除uboot和kernel开机logo【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/71600690 Platform: RockchipOS: Android 6.0Kernel ...

  3. UVA1378 A Funny Stone Game —— SG博弈

    题目链接:https://vjudge.net/problem/UVA-1378 题意: 两个人玩游戏,有n堆石子,两人轮流操作:于第i堆石子中取走一块石子,然后再往第j.k堆中各添加一块石子.其中 ...

  4. 关于yolo 模型中1X1卷积层的作用

    1X1卷积层的作用: 1.实现跨通道的交互和信息整合.2.进行卷积核通道数的降维和升维.3.就是可以在保持feature map 尺寸不变(即不损失分辨率)的前提下大幅增加非线性特性,把网络做得很de ...

  5. TCP 错误代码 10013: 试图以其访问权限所禁止的方式访问套接字

    大家遇到的问题可能是登录没反应,这时,大家要充分利用调试工具,调试工具可能会提示下面错误: 未能连接到 net.tcp://swk-pc:4502/chatservice.svc.连接尝试的持续时间为 ...

  6. HDOJ-1391

    Number Steps Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. 将java项目打包成jar包,之后在制作成可执行的exe文件

    1.利用eclipse选择 2.利用ex4j,详情见百度教程http://jingyan.baidu.com/article/00a07f38aad55182d128dc4c.html

  8. c++中stl----vector

    1 vector是啥玩意 (1)可以使用下标访问个别的元素 (2)迭代器可以按照不同的方式遍历 (3)可以在容器的末尾增加或者删除元素 2 容器大小和容器的容量区别 (1)大小是元素的个数,容量是分配 ...

  9. springMVC拦截配置

    1.web.xml文件配置 <!-- spring mvc --> <servlet> <servlet-name>DispatcherServlet</se ...

  10. supervisor简明教程

    一.supervisor是什么 Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态 ...