#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1<<18;
long long s[N];
int er[N], n, m, Par[N];
vector<int> nei[N], cmp[N];
vector<pair<int,int>> ord;
int root(int v){
return (Par[v] == v ? v : Par[v] = root(Par[v]));
}
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++){
cin>>s[i];
ord.push_back({s[i], i});
cmp[i] = {i};
Par[i] = i;
}
sort(begin(ord), end(ord));
for (int i=1, a, b;i<=m;i++){
cin>>a>>b;
if (s[a] > s[b] or (s[a] == s[b] and a > b))
swap(a, b);
nei[b].push_back(a);
}
for (auto [sz, i] : ord){
for (int j : nei[i]){
j = root(j);
if (s[j] < sz){
for (int k : cmp[j])
er[k] = 1;
cmp[j].clear();
}
if (cmp[i].size() < cmp[j].size())
swap(cmp[i], cmp[j]);
for (int k : cmp[j])
cmp[i].push_back(k);
s[i] += s[j];
Par[j] = Par[i];
}
}
for (int i=1;i<=n;i++)
cout<<!er[i];
cout<<endl;
}
| # | 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... |