# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
879930 | sleepntsheep | Stranded Far From Home (BOI22_island) | C++17 | 89 ms | 14420 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <utility>
#include <vector>
#include <tuple>
#include <algorithm>
int n, m, s[200000], p[200000], r[200000];
long long q[200000];
int f(int x)
{
if (p[x] == x) return x;
int w = f(p[x]);
r[x] |= r[p[x]];
return p[x] = w;
}
void u_(int x, int y)
{
if ((x = f(x)) == (y = f(y))) return;
if (q[x] < s[y]) r[x] = 1;
q[y] += q[x];
p[x] = y;
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 0; i < n; ++i) scanf("%d", s+i), p[i] = i, q[i] = s[i];
std::vector<std::tuple<int, int, int>> e(m);
for (auto &[w, u, v] : e)
{
scanf("%d%d", &u, &v);
if (s[--u] > s[--v]) std::swap(u, v);
w = s[v];
}
std::sort(e.begin(), e.end());
for (auto [_, u, v] : e) u_(u, v);
for (int i = 0; i < n; ++i) f(i), putchar(48+!r[i]);
return 0;
}
Compilation message (stderr)
# | 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... |