Submission #1166060

#TimeUsernameProblemLanguageResultExecution timeMemory
1166060fryingducStranded Far From Home (BOI22_island)C++20
100 / 100
70 ms8676 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...