#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll MAX_N = 1e5 + 2;
vector < ll > bagtsan[MAX_N];
ll uldegdel[MAX_N];
ll found[MAX_N];
int main() {
//ios::sync_with_stdio(0);
//cin.tie(0);
//cout.tie(0);
ll n, m, r, N, ind, k, x, y, z,i, j, t;
cin >> N >> n;
ll a[n + 2];
for (i = 1; i <= n; i ++) {
cin >> a[i];
found[a[i]] = 1;
}
cin >> m;
ll L[m + 2], R[m + 2];
vector < ll > Le[m + 2], Ri[m + 2];
for (i = 1; i <=m; i ++) {
cin >> L[i] >> R[i];
uldegdel[i] = L[i];
for (j = 1; j <= L[i]; j ++) {
cin >> x;
if ( found[x] == 1) uldegdel[i] --;
bagtsan[x].push_back(i);
Le[i].push_back(x);
}
for (j = 1; j <= R[i]; j ++) {
cin >> x;
Ri[i].push_back(x);
}
}
queue < ll > q;
for (i = 1; i <= m; i ++) {
if ( uldegdel[i] == 0) q.push(i);
}
while (!q.empty()){
ind = q.front();
q.pop();
for ( ll X : Ri[ind]) {
if ( found[X] == 1) {
continue;
}
found[X] = 1;
for ( ll Y : bagtsan[X]) {
uldegdel[Y] --;
if ( uldegdel[Y] == 0) q.push(Y);
}
}
}
vector < ll > ans;
for (i = 1; i <= N; i ++) {
if ( found[i] == 1) {
ans.push_back(i);
}
}
cout << ans.size() << endl;
for ( ll X : ans) {
cout << X << " ";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |