// 建图,同时注意入度的统计 void add(int u, int v) { ind[v]++; Next[cnt] = head[u]; head[u] = cnt; to[cnt] = v; cnt++; } // 根据入度将根节点加入队列 for (int i = 1; i <= n; i++) { if (ind[i] == 0) { q.push(i); } } // bfs遍历 while (!q.empty()) { int u = q.front(); q.pop(); for (int e = head[u]; e > 0; e = Next[e]) { int v = to[e]; ind[v]--; if (ind[v] == 0) q.push(v); } }