Submission #1267181

#TimeUsernameProblemLanguageResultExecution timeMemory
1267181DangKhoizzzzStranded Far From Home (BOI22_island)C++20
10 / 100
135 ms27312 KiB
#include <algorithm>
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pii pair <int , int>
#define arr3 array <int , 3>

using namespace std;

const int INF = 1e18;
const int maxn = 2e5 + 7;
const int mod = 1e9;

int n , m , a[maxn];
vector <int> g[maxn];
bool vis[maxn];


namespace sub1
{
    bool check()
    {
        if(n <= 2000 && m <= 2000) return 1;
        return 0;
    }
    void solve()
    {
        priority_queue <pii> Q;
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++) vis[j] = 0;
            vis[i] = 1;
            int cur = a[i];
            for(int v: g[i]) Q.push((pii){-a[v] , v});
            
            while(!Q.empty())
            {
                pii tmp = Q.top();
                Q.pop();
                int u = tmp.se;
                if(vis[u]) continue;
                vis[u] = 1;
                if(a[u] > cur) break;
                cur += a[u];
                for(int v: g[u])
                {
                    if(!vis[v]) Q.push({-a[v] , v});
                }
            }
            cout << *min_element(vis+1 , vis+n+1);
        }
    }
};

namespace sub2 
{
    bool check()
    {
        for(int i = 2; i <= n; i++)
        {
            if(a[i] > a[i-1]) return 0;
        }
        return 1;
    }
    int sum[maxn];
    bool mark[maxn];
    void dfs(int u , int p)
    {
        sum[u] = a[u];
        for(int v: g[u])
        {
            if(v == p) continue;
            dfs(v , u);
            sum[u] += sum[v];
        }
    }
    void go(int u , int p)
    {
        if(sum[u] >= a[p]) mark[u] = 1;
        else return;
        for(int v: g[u])
        {
            if(v == p) continue;
            go(v , u);
        }
    }
    void solve()
    {
        dfs(1 , 0);
        go(1 , 0);
        for(int i = 1; i <= n; i++) cout << mark[i];
    }
}

namespace sub4
{
    void solve()
    {
        
    }
}


void solve()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int i = 1; i <= m; i++)
    {
        int u , v; cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    if(sub1::check()) sub1::solve();
    else if(sub2::check()) sub2::solve();
    else sub4::solve();
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
    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...