连通性

发布时间 2024-01-06 18:23:30作者: CheZiHe929

简介

有向无环图,途中不存在回路。

一个排列,对于有向边 \(u\)\(v\),那么排列中 \(u\) 一定在 \(v\) 前。

存在拓扑序就不会构成回路。

用队列维护。

点击查看代码
int in[MAXN];//入度
std::queue<int> q;
int ans[MAXN],cnt;
for(int i=1;i<=n;i++)
	if(!in[i])q.push(i);
while(!q.empty()){
	int x=q.front();
	q.pop();
	ans[++cnt]=x;
	for(auto v:g[x])
		if(!--in[v])q.push(v);
}

例题 1

求解字典序最小的拓扑序。

每步贪心取出编号最小的点,只需把队列改成小根堆。

例题 2

求一个图的拓扑序是否唯一。