Beispiel #1
0
node dfs(int u) {
  node res(1,a[u]);
  e[u] = true;
  for (edge i = g.getHead(u); i; i = i->next) {
    int v = i->to;
    if (e[v]) continue;
    node tmp = dfs(v);
    res.first += tmp.first;
    res.second += tmp.second;
  }
  return res;
}
Beispiel #2
0
void bfs() {
  queue<int> q;
  rep(i, 1, n+1) if (d[i] <= 1) q.push(i);
  while (!q.empty()) {
    int u = q.front(); q.pop();
    if (e[u]) continue; e[u] = true;
    if (d[u] != 1) continue;
    for (edge i = g.getHead(u); i; i = i->next) {
      int v = i->to;
      if (e[v]) continue;
      if ((--d[v]) == 1) q.push(v);
    }
  }
}