强连通总结
定义:一个有向图中,一个图可以分成几个分支,每个分支的任意两个结点如果都有路径使得互相可达,那么称这个分支为强连通分支
现在要给一个有向图,求出强连通分支,可以利用Tarjan发明的算法
求出强连通分支之后,可以根据题目,把每个强连通分支进行缩点,缩点之后的图会变成一个有向无环图(DAG),就可以进行一些算法(如DP, 最短路,最小生成树之类的)
模板:
const int N = 505;
int n;
vector<Edge> g[N];
int pre[N], dfn[N], dfs_clock, sccn, sccno[N];
stack<int> S;
void dfs_scc(i......
阅读全文