#include "bits/stdc++.h"
using namespace std;
#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif
const int maxn = 2e5 + 5;
int n, m, a[maxn];
bool f[maxn];
long long lab[maxn];
int find(int u) {
if (lab[u] < 0) return u;
int p = find(lab[u]);
f[u] |= f[lab[u]];
return lab[u] = p;
}
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
lab[i] = -a[i];
}
vector<tuple<int, int, int>> edges;
for (int i = 1; i <= m; ++i) {
int u, v; cin >> u >> v;
if (a[u] < a[v]) swap(u, v);
edges.emplace_back(a[u], u, v);
}
sort(edges.begin(), edges.end());
for (auto [w, u, v] : edges) {
u = find(u), v = find(v);
if (u == v) continue;
debug(u, v, -lab[v], a[u]);
if (-lab[v] < a[u]) {
f[v] = 1;
}
lab[u] += lab[v];
lab[v] = u;
}
for (int i = 1; i <= n; ++i) {
find(i);
cout << (f[i] ^ 1);
}
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
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... |