在一张有向图中,判断是否存在一个点,从该点出发可以到达所有点

维护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,如果从这个点开始可以遍历所有点,则满足条件,否则不满足。

posted @ 2026-04-13 11:32  kzssCCC  阅读(4)  评论(0)    收藏  举报