CF164A
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6 + 10;
ll n, m, c, l;
ll f[N];
vector <ll> v[N], use;
ll p[N];
bool vis[N];
void dfs (ll u) {
p[++ l] = u;
if (f[u] == 2) {
for (int i = 1; i <= l; ++ i) {
vis[p[i]] = true;
}
}
ll sz = v[u].size ();
for (int i = 0; i < sz; ++ i) {
ll y = v[u][i];
if (f[y] != 1) {
dfs (y);
}
}
}
int main () {
cin >> n >> m;
for (int i = 1; i <= n; ++ i) {
cin >> f[i];
if (f[i] == 1) {
use.push_back (i);
}
}
for (int i = 1; i <= m; ++ i) {
ll x, y;
cin >> x >> y;
v[x].push_back (y);
}
ll sz = use.size ();
for (int i = 0; i < sz; ++ i) {
l = 0;
ll u = use[i];
c = u;
dfs (u);
}
for (int i = 1; i <= n; ++ i) {
if (vis[i]) {
cout << 1 << '\n';
}
else {
cout << 0 << '\n';
}
}
return 0;
}
RE on test 5
求一个RE的理由