#include <bits/stdc++.h>
using namespace std;
vector<int> dsu_parent;
vector<int> dsu_sum;
pair<int, int> get_root(int node) {
int depth = 0;
while(dsu_parent[node] != -1) {
depth++;
node = dsu_parent[node];
}
return make_pair(node, depth);
}
void merge(int a, int b) {
int depth_a, depth_b, root_a, root_b;
tie(root_a, depth_a) = get_root(a);
tie(root_b, depth_b) = get_root(b);
if(root_a == root_b) return;
if(depth_a < depth_b) {
dsu_parent[root_a] = root_b;
dsu_sum[root_b] += dsu_sum[root_a];
dsu_sum[root_a] = -1;
}
else {
dsu_parent[root_b] = root_a;
dsu_sum[root_a] += dsu_sum[root_b];
dsu_sum[root_b] = -1;
}
}
int main() {
int N, M;
cin >> N >> M;
vector<int> people(N);
dsu_parent = vector<int>(N, -1);
for(int i = 0; i < N; i++) {
cin >> people[i];
}
dsu_sum = people;
vector<tuple<int, int, int>> edges(M);
for(int i = 0; i < M; i++) {
int a, b;
cin >> a >> b;
a--;
b--;
edges[i] = make_tuple(max(people[a], people[b]), a, b);
}
sort(edges.begin(), edges.end());
vector<bool> alive(N, true);
/*for(int a : dsu_parent) cout << a << " ";
cout << "\n";
for(int a : dsu_sum) cout << a << " ";
cout << "\n";
for(int i = 0; i < N; i++) cout << dsu_sum[get_root(i).first] << " ";
cout << "\n";*/
for(int i = 0; i < M; i++) {
// kill nodes
int treshold = get<0>(edges[i]);
//cout << "T: " << treshold << "\n";
for(int j = 0; j < N; j++) {
//cout << get_root(j).first << " " << dsu_sum[get_root(j).first] << "\n";
if(dsu_sum[get_root(j).first] < treshold) {
alive[j] = false;
}
}
while(i + 1 < M && get<0>(edges[i]) == get<0>(edges[i + 1])) {
merge(get<1>(edges[i]), get<2>(edges[i]));
i++;
}
merge(get<1>(edges[i]), get<2>(edges[i]));
/*for(int a : dsu_parent) cout << a << " ";
cout << "\n";
for(int a : dsu_sum) cout << a << " ";
cout << "\n";
for(int j = 0; j < N; j++) cout << dsu_sum[get_root(i).first] << " ";
cout << "\n";*/
}
for(bool b : alive) cout << b;
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... |