mooyyu

G4 - 拓扑排序

c++11 graph

class Topo_sort {
	const int n;
	int top = 0, end = 0;
public:
	explicit Topo_sort(const int n): n(n) {}
	struct node {
		int to, ptr;
	} ar[maxm+1] {};
	int head[maxn+1] {};
	int que[maxn] {};
	int in[maxn+1] {};
	bool solve() {
		for (int i = 1; i <= n; i++) if (!in[i]) que[end++] = i;
		while (top < end) {
			for (int i = head[que[top++]]; i; i = ar[i].ptr)
				if (!--in[ar[i].to]) que[end++] = ar[i].to;
		}
		return end == n;
	}
};

Notes

  • 输入边的同时更新入度:注意链式前向星的idx自增在更新更新入度之后