Submission #1272251

#TimeUsernameProblemLanguageResultExecution timeMemory
1272251flaming_top1Birmingham (COCI20_birmingham)C++20
70 / 70
61 ms9172 KiB
#include <bits/stdc++.h>

#define SPED                                                                                                           \
    ios_base::sync_with_stdio(false);                                                                                  \
    cin.tie(0);                                                                                                        \
    cout.tie(0);

#define endl "\n"
#define fi first
#define se second
#define lint long long
#define fami signed
#define lore main
#define freefire freopen

const lint INF = 0x1f1f1f1f1f1f1f1f;
const lint NEG = 0xE1E1E1E1E1E1E1E1;

using namespace std;

int n, m, q, k;
int a[100005];
lint dist[100005], power[100005];
vector<int> adj[100005];

void bfs()
{
    memset(dist, 0x1f, sizeof dist);
    queue<int> temp;
    for (int i = 1; i <= q; i++)
    {
        temp.emplace(a[i]);
        dist[a[i]] = 0;
    }
    while (!temp.empty())
    {
        auto now = temp.front();
        temp.pop();
        for (auto i : adj[now])
            if (dist[i] > dist[now] + 1)
            {
                dist[i] = dist[now] + 1;
                temp.emplace(i);
            }
    }
}

lint binaryu(lint x)
{
    int l = 1, r = n, mid, ans = 0;
    while (l <= r)
    {
        mid = l + r >> 1;
        if (power[mid] >= x)
        {
            ans = mid;
            r = mid - 1;
        }
        else
            l = mid + 1;
    }
    return ans;
}

fami lore()
{
    SPED;
    cin >> n >> m >> q >> k;
    for (int i = 1; i <= q; i++)
        cin >> a[i];

    for (int i = 1; i <= m; i++)
    {
        int l, r;
        cin >> l >> r;
        adj[l].emplace_back(r);
        adj[r].emplace_back(l);
    }

    bfs();

    for (lint i = 1; i <= n; i++)
    {
        power[i] = i * k;
        power[i] += power[i - 1];
    }

    for (int i = 1; i <= n; i++)
    {
        if (dist[i] == 0)
            cout << 0 << " ";
        else
        {
            cout << binaryu(dist[i]) << " ";
        }
    }
}
// Let your soul wander where dreams are born.
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...