Submission #1305520

#TimeUsernameProblemLanguageResultExecution timeMemory
1305520AzeTurk810Stranded Far From Home (BOI22_island)C++20
0 / 100
174 ms15336 KiB
/*
Telebe of Adicto && Mamedov yani AzeTurk810
I see humans but no humanity
*/
#include <algorithm>
#include <cassert>
#include <functional>
#include <iostream>
#include <queue>
#include <utility>
#include <vector>

//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

using ll = long long;
using namespace std;

#define ln '\n'
#define INFi 1e9
#define INFll 1e18

#ifdef ONPC
    #include<algo.hpp>
#else
    #define dbg(...)
#endif

char solve() {
    int N , M;
    if(!(cin >> N >> M))
        return 1;
    vector< int > S(N + 1);
    for(int i = 1;i <= N;i++) 
        cin >> S[i];
    vector< vector< int > > g(N + 1);
    for(int i = 0;i < M;i++) {
        int u , v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    vector< pair< int , int > > nums;
    for(int i = 1;i <= N;i++) {
        nums.push_back(make_pair(S[i], i));
    }
    sort(nums.begin() , nums.end() , greater<>());
    vector< int > ans(N + 1);
    assert(nums.size() == N);
    vector< int > used(N + 1);
    int idx = 1;

    auto bfs = [&] (int st) {
        priority_queue< pair<int , int > , vector< pair< int , int > > , greater<> > pq;
        int cur = S[st];
        for(int u : g[st]) {
            pq.push({S[u] , u});
        }
        while (!pq.empty()) {
            auto [w , v] = pq.top();
            dbg(v);
            pq.pop();
            if(w > cur)
                return false;
            if(ans[v])
                return true;
            cur += w;
            for(auto u : g[v]) {
                    dbg(u);
                    dbg(used[u]);
                if(used[u] < idx) {
                    pq.push({S[u] , u});
                    used[u] = max(used[u] , idx);
                }
            }
        }
        return true;
    };

    for(int i = 0;i < N;i++) {
        dbg(nums[i].second);
        int v = nums[i].second;
        ans[v] = bfs(v);
        idx++;
    }
    for(int i = 1;i <= N;i++) {
        cout << ans[i];
    }
    cout << ln;
    return 0;
}

// Attack on titan<3

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    int t = 1e9;
    //cin >> t;
    for(int cases = 0 ; cases < t;cases ++) {
        if(solve())
            break;
        #ifdef ONPC
        cerr << "__________\n";
        #endif
    }
}
// Just Imaginary
#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...