题目传送门

首先发现初始图五有向环的话那么肯定是“YES”,否则是“NO”。然后找到一种满足要求地建树规则即可。这里采用拓扑排序建树,先dfs找出目前点的拓扑序编号,要求从编号小的连向编号大的,然后根据编号大小给无向边确定方向。这样一定满足要求,因为如果一开始没有有向环,那么沿着有向边走点的拓扑序编号一定不断变大,所以不可能产生环。

#include<cstdio>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 1e6 + 50; int T, n, m, cnt;
int num[N];
bool used[N];
vector<vector<int> > d;
vector<int> Topu; void dfs(int u){
used[u] = 1;
for(auto &x : d[u]) if(!used[x]) dfs(x);
Topu.emplace_back(u);
} int main(){
scanf("%d", &T);
while(T--){
scanf("%d%d", &n, &m);
cnt = 0;
bool ok = 1;
Topu.clear();
vector<pair<int, int> > e;
d = vector<vector<int> >(n + 1);
for(int i = 1; i <= n; ++i) used[i] = 0;
for(int i = 1, t, x, y; i <= m; ++i){
scanf("%d%d%d", &t, &x, &y);
if(t == 1) d[x].emplace_back(y);
e.emplace_back(make_pair(x, y));
}
for(int i = 1; i <= n; ++i) if(!used[i]) dfs(i);
for(int i = n - 1; ~i; --i) num[Topu[i]] = ++cnt;
for(int i = 1; i <= n; ++i){
for(auto &x : d[i]) if(num[i] > num[x]) ok = 0;
}
if(!ok) puts("NO");
else{
puts("YES");
for(auto &tt : e){
int x = tt.first, y = tt.second;
if(num[x] > num[y]) printf("%d %d\n", y, x);
else printf("%d %d\n", x, y);
}
}
}
return 0;
}

Codeforces Round #656 (Div. 3) E. Directing Edges(拓扑排序)的更多相关文章

  1. Codeforces Round #460 (Div. 2)_D. Substring_[dp][拓扑排序]

    题意:一个有向图,每个结点 被赋予一个小写字母,一条路径的value等与这条路径上出现次数最多的字母的数目,求该图的最大value 比赛时,用dfs超时,看官方题解用的dp和拓扑排序,a--z用0-2 ...

  2. Codeforces Round #656 (Div. 3) 题解

    A. Three Pairwise Maximums #构造 题目链接 题意 给定三个正整数\(x,y,z\),要求找出正整数\(a,b,c\),满足\(x=max(a,b), y=max(a,c), ...

  3. Codeforces Round #656 (Div. 3) D. a-Good String

    题目链接:https://codeforces.com/contest/1385/problem/D 题意 一个小写字母串称为 $c-good\ string$,如果至少满足以下条件之一: 字符串长度 ...

  4. Codeforces Round #656 (Div. 3) C. Make It Good

    题目链接:https://codeforces.com/contest/1385/problem/C 题意 去除一个数组的最短前缀使得余下的数组每次从首或尾部取元素可以排为非减序. 题解一 当两个大数 ...

  5. Codeforces Round #656 (Div. 3) B. Restore the Permutation by Merger

    题目链接:https://codeforces.com/contest/1385/problem/B 题意 有两个大小为 $n$ 的相同的排列,每次从二者或二者之一的首部取元素排入新的数组,给出这个大 ...

  6. Codeforces Round #656 (Div. 3) A. Three Pairwise Maximums

    题目链接:https://codeforces.com/contest/1385/problem/A 题意 给出三个正整数 $x,y,z$,找出三个正整数 $a,b,c$ 使得 $x = max(a, ...

  7. Codeforces Round #656 (Div. 3) D. a-Good String (DFS)

    题意:有一个长度为\(n=2^k\)的字符串,对于某个字符\(c\),我们定义他是一个\(c-good\),如果: ​ 1.\(len=1\),并且\(s[1]=c\). ​ 2.\(len>1 ...

  8. Codeforces Round #656 (Div. 3) C. Make It Good (贪心,模拟)

    题意:给你一个数组\(a\),可以删除其前缀,要求操作后得到的数组是"good"的.对于"good":可以从数组的头和尾选择元素移动到新数组,使得所有元素移动后 ...

  9. Codeforces Round #656 (Div. 3) B. Restore the Permutation by Merger (模拟)

    题意:有两个完全相同的排列,将其中一个的元素按相对顺序插入另外一个排列中,给你操作完的排列,求原排列. 题解:感觉看看样例就能直接写了啊,直接遍历,用桶存数字个数,如果桶为空,直接输出即可. 代码: ...

  10. Codeforces Round #656 (Div. 3) A. Three Pairwise Maximums (数学)

    题意:给你三个正整数\(x\),\(y\),\(z\),问能够找到三个正整数\(a\),\(b\),\(c\),使得\(x=max(a,b)\),\(y=max(a,c)\),\(z=max(b,c) ...

随机推荐

  1. GIT保存记录原理之commit对象

    GIT 中提交对象非常的重要,我们通过它记录代码提交过程.进行文件保存.回退等操作,那么它是怎样帮助我们记录这些信息的呢?其实就是都保存在项目根目录的 .git 文件夹中. 新建空项目 ```gitD ...

  2. 红帽RHCE考题总结练习(8.0 ansible)

    本文是红帽RHCE考题的总结,个别题目写了多种步骤. 一.安装和配置ansible 题目: 按照下方所述,在控制节点 bastion.lab.example.com 上安装和配置 Ansible: 安 ...

  3. 解决git出现fatal: detected dubious ownership in repository at XXXXX的错误

    在window环境下,使用git命令时报错fatal: detected dubious ownership in repository at XXXXXX,图片如下 解决方法如下 添加一行代码 gi ...

  4. .NET API 中的 FromRoute、FromQuery、FromBody 用法

    原文链接:https://www.cnblogs.com/ysmc/p/17663663.html 最近技术交流群里,还有不少小伙伴不知道 FromRoute.FromQuery.FromBody 这 ...

  5. API接口开发管理平台--多领域企业数字化管理解决方案

    随着数字化时代的到来,企业需要进行数字化转型才能更好地适应市场需求和用户需求.而API接口则是数字化转型中的重要组成部分,可以帮助企业更好地管理信息,提高效率.本文将介绍挖数据解决方案--API接口开 ...

  6. KRPANO 最新官方文档中文版(持续更新)

    KRPano最新官方文档中文版分享,后续持续更新: http://docs.krpano.tech/ 本博文发表于:http://www.krpano.tech/archives/849 发布者:屠龙 ...

  7. 【krpano】KRPano打开黑屏: FATAL ERROR

    在KRPano开发过程中,初学者打开项目经常遇到如下的问题: FATAL ERROR:tour.xml – loading failed! (0) 或者是: ERROR:Local usage wit ...

  8. dedebiz友情链接样式修改

    文件位置 /system/taglib/flink.lib.php 45行位置 根据自己需求修改就行

  9. Intrusion Detection Using Convolutional Neural Networks for Representation Learning 笔记

    Intrusion Detection Using Convolutional Neural Networks for Representation Learning 2.2 实验数据的预处理 为了确 ...

  10. Django-rest-framework框架——请求与响应、视图组件

    目录 一 请求与响应 1.1 Request 1.1.1.1 常用属性 1).data 2).query_params 1.2 Response 1.1.2.1 构造方式 1.1.2.2 常用属性 1 ...