結果
問題 |
No.3222 Let the World Forget Me
|
ユーザー |
![]() |
提出日時 | 2025-07-05 21:29:24 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,913 bytes |
コンパイル時間 | 1,779 ms |
コンパイル使用メモリ | 213,540 KB |
実行使用メモリ | 11,540 KB |
最終ジャッジ日時 | 2025-07-05 22:29:45 |
合計ジャッジ時間 | 4,315 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 1 WA * 29 RE * 1 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int N, M; cin >> N >> M; vector<ll> P(N); for (int i = 0; i < N; i++) { cin >> P[i]; } vector<vector<int>> g(N, vector<int>()); for (int i = 0; i < N - 1; i++) { int a, b; cin >> a >> b; a--; b--; g[a].push_back(b); g[b].push_back(a); } vector<int> C(M); for (int i = 0; i < M; i++) { cin >> C[i]; } vector<int> dist(N, -1); queue<pair<int, int>> q; for (int i = 0; i < M; i++) { q.emplace(C[i], 0); } while (!q.empty()) { auto [n, d] = q.front(); q.pop(); if (dist[n] != -1) continue; dist[n] = d; for (int i = 0; i < g[n].size(); i++) { q.emplace(g[n][i], d + 1); } } vector<int> deg(N); for (int i = 0; i < N; i++) { deg[i] = g[i].size(); } priority_queue<tuple<ll, int, int>, vector<tuple<ll, int, int>>> pq; for (int i = 0; i < N; i++) { if (dist[i] != 0 && deg[i] == 1) pq.emplace(P[i], dist[i], i); } ll ans = 0; int time = 0; while (!pq.empty()) { while (!pq.empty()) { auto [p, d, i] = pq.top(); if ( d > time ) { ans += p; pq.pop(); for (int j = 0; j < g[i].size(); j++) { deg[g[i][j]]--; if (deg[g[i][j]] == 1) { pq.emplace(P[g[i][j]], dist[g[i][j]], g[i][j]); } } break; } else { pq.pop(); } } time++; } cout << ans << endl; }