This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
char *p1, *p2, buf[1<<20];
#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
inline int read() {int x=0;char c=gc();while(!isdigit(c))c=gc();while(isdigit(c))x=x*10+c-'0',c=gc();return x;}
#define pc(c) putchar(c)
void write(int x) {if(x>9)write(x/10);pc('0'+x%10);}
int n, m;
int a[200010], b[200010];
vector<int> G[200010];
int dsu[200010], tag[200010], sum[200010];
int ans[200010], vis[200010];
int find(int u) {
int r = (u == dsu[u]? u : find(dsu[u]));
tag[u] |= tag[dsu[u]];
if (tag[u]) ans[u] = 0;
dsu[u] = r;
return r;
}
signed main() {
n = read(), m = read();
for (int i = 1; i <= n; i++) {
a[i] = read();
dsu[i] = b[i] = i;
}
for (int i = 1; i <= m; i++) {
int u = read(), v = read();
G[u].push_back(v);
G[v].push_back(u);
}
sort(b + 1, b + 1 + n, [](int x, int y){return a[x]<a[y];});
for (int i = 1; i <= n; i++) {
int u = b[i];
ans[u] = vis[u] = 1;
sum[u] = a[u];
for (int v : G[u]) {
if (!vis[v]) continue;
v = find(v);
if (v == u) continue;
if (sum[v] < a[u]) tag[v] = 1;
dsu[v] = u;
sum[u] += sum[v];
}
}
for (int i = 1; i <= n; i++) {
find(i);
}
for (int i = 1; i <= n; i++) {
write(ans[i]);
}
pc('\n');
return 0;
}
# | 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... |