제출 #1359355

#제출 시각아이디문제언어결과실행 시간메모리
1359355kantaponzStranded Far From Home (BOI22_island)C++20
0 / 100
108 ms35288 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long

const int nx = 2e5 + 5;

ll sz[nx];
int n, m;
vector<int> adj[nx];
set<int> s[nx];
int pa[nx];
vector<pair<int,int>> qrs;
bool vis[nx];

int fp(int n) {
    if (pa[n] == n) return n;
    return pa[n] = fp(pa[n]);
}

int main() {
    ios_base::sync_with_stdio(0), cin.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++) cin >> sz[i], pa[i] = i, s[i].insert(i), qrs.emplace_back(sz[i], i);
    sort(qrs.begin(), qrs.end());
    while (m--) {
        int u, v;
        cin >> u >> v;
        adj[u].emplace_back(v);
        adj[v].emplace_back(u);
    }

    for (auto [x, u] : qrs) {
        vis[u] = 1;
        for (auto v : adj[u]) {
            if (!vis[v] || fp(u) == fp(v)) continue;
            int pu = fp(u), pv = fp(v);
            if (sz[pv] < sz[pu]) {
                sz[pv] = 0;
                s[pv].clear();
                continue;
            }
            if (s[pv].size() > s[pu].size()) swap(s[pu],s[pv]);
            for (auto xx : s[pv]) s[pu].insert(xx);
            sz[pu] += sz[pv];
            sz[pv] = 0;
            s[pv].clear();
            pa[pv] = pu;
        }
    }

    vector<int> ans(n);
    for (auto x : s[qrs.back().second]) {
        ans[x-1] = 1;
    }
    for (auto x : ans) cout << x;


}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…