Submission #995372

#TimeUsernameProblemLanguageResultExecution timeMemory
995372asdfgraceStranded Far From Home (BOI22_island)C++17
10 / 100
1098 ms18424 KiB
#include <bits/stdc++.h>
using namespace std;

#define dbg(x) x
#define prt(x) dbg(cerr << x)
#define pv(x) prt(#x << " = " << x << '\n')
#define parr(x) dbg(prt(#x << " = "); for (auto y : x) prt(y << ' '); prt('\n'));
#define parr2d(x) dbg(prt(#x << " = \n"); for (auto y : x) parr(y); prt('\n'));

/*
which ties are possible?
a can convince b if sum(a) > sum(b)
note that nodes are weighted
note that the tie with the strictly least number can't be 1 in the end
one with strictly most can be 1 in the end
how to greedily make 1 the largest?
dfs from the node
and keep adding the smallest adj greedily
and make sure that the size of this color's comp is greater than any other color's comp

subtask 1: brute force
subtask 3: just some weird stuff with set ig
*/

int main() {
  int n, m;
  cin >> n >> m;
  vector<long long> s(n);
  for (int i = 0; i < n; i++) {
    cin >> s[i];
  }
  vector<vector<int>> edges(n);
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    x--; y--;
    edges[x].push_back(y);
    edges[y].push_back(x);
  }
  for (int i = 0; i < n; i++) {
    vector<bool> vis(n, false);
    vis[i] = true;
    priority_queue<array<long long, 2>> que;
    que.push({-s[i], i});
    bool ok = true;
    long long tot = s[i];
    while (que.size()) {
      long long sz = -que.top()[0], node = que.top()[1];
      que.pop();
      if (sz > tot) {
        ok = false;
        break;
      }
      if (node != i) {
        tot += sz;
      }
      for (auto next : edges[node]) {
        if (!vis[next]) {
          vis[next] = true;
          que.push({-s[next], next});
        }
      }
    }
    cout << (ok ? 1 : 0);
  }
  cout << '\n';
}
#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...