Submission #1301388

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

#define all(v) (v).begin(), (v).end()
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];

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);
    }
    for(ll i = 1; i <= N; i++) sort(all(adj[i]));

    // bfs1
    for(ll i = 1; i <= N; i++) dist1[i] = inf;
    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] == inf) dist1[u] = dist1[v] + 1, qu.push(u);
    }

    // bfs2
    for(ll i = 1; i <= N; i++) adj2[i] = adj[i];
    for(ll i = 1; i <= N; i++) dist2[i] = inf;
    dist2[S] = 0;
    qu.push(S);
    while(!qu.empty())
    {
        auto v = qu.front(); qu.pop();
        for(auto& u : adj[v])
        {
            for(auto& i : adj2[u]) if(dist2[i] == inf) dist2[i] = dist2[v] + 1, qu.push(i);
            vector<ll> tmp;
            for(auto& i : adj2[u]) if(dist2[i] == inf) 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]}) << "\n";
    }
}

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