#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1<<18;
#define int long long
int Sz[N], Par[N], er[N], lst, n, m;
vector<int> cmp[N];
vector<pair<int, pair<int, int>>> E;
int root(int v){
return (Par[v] == v ? v : Par[v] = root(Par[v]));
}
signed main(){
cin>>n>>m;
for (int i=1;i<=n;i++){
cin>>Sz[i], Par[i] = i;
cmp[i].push_back(i);
}
for (int i=1, a, b;i<=m;i++){
cin>>a>>b;
if (Sz[a] < Sz[b])
swap(a, b);
E.push_back({Sz[a], {a, b}});
}
sort(begin(E), end(E));
for (auto [p, ab] : E){
auto [a, b] = ab;
int A = root(a), B = root(b);
if (A == B)
continue;
if (Sz[B] < p){
for (int i : cmp[B])
er[i] = 1;
cmp[B].clear();
}
Par[B] = A;
Sz[A] += Sz[B];
if (cmp[A].size() > cmp[B].size())
swap(cmp[A], cmp[B]);
for (int i : cmp[B])
cmp[A].push_back(i);
}
for (int i=1;i<=n;i++)
cout<<!er[i];
cout<<'\n';
}
| # | 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... |