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