Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <bits/stdc++.h>using namespace std;int main(void) {ios::sync_with_stdio(false);int N;cin >> N;static vector<int> G[100010];queue<int> q;vector<bool> is_stable(N + 1, false);vector<bool> vis(N + 1, false);vector<int> previous_stable_node(N + 1, 0);vector<int> degree(N + 1, 0);for (int i = 1, k; i <= N; ++ i) {cin >> k;for (int j = 0, a; j < k; ++ j) {cin >> a;if (a == 0) q.push(i), vis[i] = true, is_stable[i] = true, previous_stable_node[i] = i;else (++ degree[i]), G[a].emplace_back(i);}}while (!q.empty()) {int u = q.front(); q.pop();for (int v: G[u]) {if (previous_stable_node[v] == 0) previous_stable_node[v] = previous_stable_node[u];else if (previous_stable_node[v] != previous_stable_node[u]) {previous_stable_node[v] = v;is_stable[v] = true;}