CF1385E Directing Edges
题目描述:
给定一个图,有无向边和有向边。对于无向边进行定向,问能否给出一个方案使得定向后的图是无环的,图不一定要联通。
我们先不考虑无向边,对于有向边组成的图,不妨进行一次拓扑排序找到每一个节点遍历的先后顺序。
我们先判掉有环的情况,也就是存在一条边 u → v u \to v u→v 而且点 u u u 的遍历时间比 v v v 要晚。
之后考虑我们肯定可以构造出一种合法的图,也就是对于所有的无向边我们考虑连接的两个几点,只要保证边 u → v u \to v u→v 而且点 u u u 的遍历时间比 v v v 早即可。
具体实现的时候因为图不一定联通,所以我们不妨对于每一个节点进行 d f s \tt dfs dfs 在搜索完儿子之后再将自己加入。这样可以保证及时搜索节点的顺序不同也可以保证是拓扑序列。
之后取反即可,因为现在是逆着的拓扑序。
#include <bits/stdc++.h>
using namespace std;
//#define Fread
//#define Getmod
#ifdef Fread
char buf[1 << 21], *iS, *iT;