Submission #1166054

#TimeUsernameProblemLanguageResultExecution timeMemory
1166054fryingducStranded Far From Home (BOI22_island)C++20
0 / 100
67 ms7088 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 sz[maxn];
int par[maxn];

int find(int u) {
  if (par[u] == u) return u;
  f[u] |= f[par[u]];
  return par[u] = find(par[u]);
}

void solve() {
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
    sz[i] = a[i], par[i] = 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;
    if (sz[v] < a[u]) {
      f[v] = 1;
    } 
    sz[u] += sz[v];
    par[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...