제출 #788831

#제출 시각아이디문제언어결과실행 시간메모리
788831OzyStranded Far From Home (BOI22_island)C++17
100 / 100
195 ms41332 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define lli long long int
#define debug(a) cout << #a << " = " << a << endl
#define debugsl(a) cout << #a << " = " << a << ", "
#define rep(i,a,b) for(int i = (a); i<=(b); i++)
#define repa(i,a,b) for(int i = (a); i>=(b); i--)
#define pll pair<lli,lli>

#define MAX 200000
//para el vector de orden
#define id second

lli n,m,a,b,total;
lli arr[MAX+2],raiz[MAX+2],uf[MAX+2],sum[MAX+2],res[MAX+2];
vector<lli> aristas[MAX+2],n_arbol[MAX+2];
vector<pll> orden;

lli sube(lli pos) {
    //debugsl(pos);
    //debug(uf[pos]);

    if (uf[pos] == pos) return pos;
    uf[pos] = sube(uf[pos]);
    return uf[pos];
}

void dfs(lli pos) {
    res[pos] = 1;
    for(auto h : n_arbol[pos]) dfs(h);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> m;
    rep(i,1,n) {
        cin >> arr[i];
        orden.push_back({arr[i],i});
        uf[i] = i;
        sum[i] = arr[i];
        raiz[i] = 1;
        total += arr[i];
    }
    rep(i,1,m) {
        cin >> a >> b;
        aristas[a].push_back(b);
        aristas[b].push_back(a);
    }
    sort(orden.begin(), orden.end());

    //debug("llego");

    for(auto act : orden) {

        //debugsl(act.first);
        //debug(act.id);
        lli soy = sube(act.id);

        for(auto h : aristas[act.id]) {
            if (arr[h] > arr[act.id]) continue;

            //debug("llego");
            //debugsl(h);
            //debug(uf[1]);

            a = sube(h);
            if(a == soy) continue;

            if (sum[a] >= arr[act.id]) {
                n_arbol[soy].push_back(a);
                raiz[a] = 0;
            }
            sum[soy] += sum[a];
            uf[a] = soy;
        }

    }

    //debug("salgo");

    rep(i,1,n) {
        if (!raiz[i]) continue;
        if (sum[i] == total) dfs(i);
    }

    rep(i,1,n) cout << res[i];

    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...