Submission #1267187

#TimeUsernameProblemLanguageResultExecution timeMemory
1267187DangKhoizzzzStranded Far From Home (BOI22_island)C++20
20 / 100
212 ms27208 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];
        int rem = n-1;
        for(int v: g[i]) Q.push((pii){-a[v], v});

        while(!Q.empty())
        {
            auto tmp = Q.top();
            Q.pop();
            int u = tmp.se;
            if(vis[u]) continue;
            if(a[u] > cur) continue;
            rem--;
            vis[u] = 1;
            cur += a[u];
            for(int v: g[u])
            {
                if(!vis[v]) Q.push({-a[v], v});
            }
        }
        cout << (rem == 0);

    }
}
};

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