vector<vector<int>> edges; // 邻接矩阵
vector<int> indeg;
 
bool bfs() {
  queue<int> q;
  for (int i = 0; i < indeg.size(); i++) {
    if (indeg[i] == 0) {
      q.push(i);
    }
  }
 
  int visited = 0;
  while (!q.empty()) {
    visited++;
    int u = q.front();
    q.pop();
    for (auto &v : edges[u]) {
      indeg[v]--;
      if (indeg[v] == 0) {
        q.push(v);
      }
    }
  }
  return visited = indeg.size();
}