在一张有向图中,判断是否存在一个点,从该点出发可以到达所有点
维护vis数组和last,last为最后一个出递归栈的元素
1.对所有点进行dfs,维护vis和last
2.清空vis,对last进行dfs,如果可以到达所有点,则last满足条件,否则没有点满足条件
function<void(int)> dfs = [&](int u){
vis[u] = 1;
for (auto& v:g[u]){
if (vis[v]) continue;
dfs(v);
}
last = u;
};
或者可以求强连通分量缩点,判断是否只有一个超点入度为0,如果从这个点开始可以遍历所有点,则满足条件,否则不满足。

浙公网安备 33010602011771号