拓扑排序(Topo sort)

对DAG(有向无环图)拓扑排序,非DAG不存在拓扑排序的说法。
方法也很简单,记录每个顶点的入度,将入度为0的点用队列维护,依次遍历即可。
模板代码:

 const int N = 107;
  int n;
  vector<int> g[N];
 
  int deg[N];
  int ans[N], cnt;
  queue<int> q;
  void toposort() {
  cnt = 0;
  for (int i = 1;i <= n;i++) deg[i] = 0;
  for (int i = 1;i <= n;i++) for (auto v : g[i]) deg[v]++;
  for (int i = 1;i <= n;i++) if (!deg[i]) q.push(i);
  while (!q.empty()) {
      int u = q.front();
      q.pop();
      ans[++cnt] = u;
      for (auto v : g[u]) {
          deg[v]−−;
          if (!deg[v]) q.push(v);
      }
 }