C.可达性
题目链接
题意:
给出一个 0 ≤ N ≤ 10
5 点数、0 ≤ M ≤ 10
5 边数的有向图,
输出一个尽可能小的点集,使得从这些点出发能够到达任意一点,如果有多个这样的集合,输出这些集合升序排序后字典序最小的。
输出一个尽可能小的点集,使得从这些点出发能够到达任意一点,如果有多个这样的集合,输出这些集合升序排序后字典序最小的。
ps:本题中,图中可能有环,自环,还可能是不连通图。
刚开始做的时候没找到模板,就上网直接搜了一个tarjan板子改了一下:题解
思路:先用tarjan算法对图中的环进行缩点,得到一个不含环的有向图。然后统计每一个缩点的入度为0的点即为答案。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 10;
struct tarjan { //tarjan模板
int n;
vector<int>e[maxn]; //边集
int dfn[maxn]; //