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>
#define int long long
using namespace std;
const int MX = 200005;
int f[MX];
int e[MX];
int n, m;
int a[MX];
vector<int> ans[MX];
vector<int> G[MX];
int fp(int u){
return e[u] < 0? u : e[u] = fp(e[u]);
}
void unon(int u, int v){
u = fp(u);
v = fp(v);
if(u == v) return;
if(e[u] > e[v]) swap(u, v);
e[u] += e[v];
f[u] += f[v];
e[v] = u;
f[v] = 0;
if(ans[u].size() < ans[v].size()) swap(ans[u], ans[v]);
for(int x: ans[v]) ans[u].push_back(x);
ans[v].clear();
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for(int i=1; i<=n; i++) cin >> a[i];
for(int i=1; i<=m; i++){
int u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
vector<int> b(n);
for(int i=1; i<=n; i++) b[i - 1] = i;
sort(b.begin(), b.end(), [&](const int &i, const int &j) -> bool { return a[i] < a[j]; });
for(int i=1; i<=n; i++) f[i] = a[i];
for(int i=1; i<=n; i++) e[i] = -1;
for(int i=1; i<=n; i++) ans[i].push_back(i);
bitset<MX> active = 0;
for(int u: b){
int cur = u;
active[u] = 1;
for(int v: G[u]) if(active[v] && cur != fp(v)){
v = fp(v);
if(f[v] < a[u]) ans[v].clear();
unon(cur, v);
cur = fp(cur);
}
}
int u = fp(1);
bitset<MX> homo = 0;
for(int x: ans[u]) homo[x] =1;
for(int i=1; i<=n; i++) cout << homo[i];
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... |