Submission #1301358

#TimeUsernameProblemLanguageResultExecution timeMemory
1301358yigzoPrice List (POI13_cen)C++20
0 / 100
27 ms8232 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
const ll inf = 1e15;

ll N, M, S, A, B;
vector<ll> adj[100001], adj2[100001];
ll dist1[100001];
ll dist2[100001];
bool vis[100001] = {};

void solve()
{
    cin >> N >> M >> S >> A >> B;
    for(ll i = 0; i < M; i++)
    {
        ll a, b; cin >> a >> b;
        adj[a].push_back(b), adj[b].push_back(a);
    }

    // bfs1
    for(ll i = 1; i <= N; i++) dist1[i] = -1;
    dist1[S] = 0;
    queue<ll> qu; qu.push(S);
    while(!qu.empty())
    {
        auto v = qu.front(); qu.pop();
        for(auto& u : adj[v]) if(dist1[u] == -1) dist1[u] = dist1[v] + 1, qu.push(u);
    }

    // bfs2
    for(ll i = 1; i <= N; i++)  dist2[i] = -1;
    dist2[S] = 0; vis[S] = true;
    qu.push(S);
    while(!qu.empty())
    {
        auto v = qu.front(); qu.pop();
        for(auto& u : adj[v])
        {
            for(auto& i : adj2[u]) {
                if(vis[i]) continue;
                if(binary_search(adj[v].begin(), adj[v].end(), i)) continue;
                dist2[i] = dist2[v] + 1; vis[i] = true;
                qu.push(i);
            }

            vector<ll> tmp;
            for(auto& i : adj2[u]) if(!vis[i]) tmp.push_back(i);
            swap(adj2[u], tmp);
        }
    }

    for(ll i = 1; i <= N; i++)
    {
        if(dist1[i] % 2 == 0) cout << min(A * dist1[i], B * (dist1[i] / 2)) << "\n";
        else cout << min({A * dist1[i], B * (dist1[i] / 2) + A, B * dist2[i]});
    }
}

int main()
{
    cin.tie(0)->sync_with_stdio(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...
#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...