結果
問題 |
No.1221 木 *= 3
|
ユーザー |
|
提出日時 | 2020-09-04 22:54:46 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,384 bytes |
コンパイル時間 | 974 ms |
コンパイル使用メモリ | 83,080 KB |
実行使用メモリ | 18,448 KB |
最終ジャッジ日時 | 2024-11-26 20:49:51 |
合計ジャッジ時間 | 3,528 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 7 WA * 11 |
ソースコード
#include <iostream> #include <vector> #include <queue> #include <utility> using namespace std; typedef pair<long long, int> P; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector<long long> a(N), b(N); for(int i = 0; i < N; i++) cin >> a[i]; for(int i = 0; i < N; i++) cin >> b[i]; vector<int> G[N]; for(int i = 0; i < N - 1; i++){ int u, v; cin >> u >> v; u--; v--; G[u].push_back(v); G[v].push_back(u); } vector<long long> size(N); for(int i = 0; i < N; i++){ size[i] = G[i].size(); } vector<int> used(N, 0); vector<long long> score(N, 0); long long sum = 0; for(int i = 0; i < N; i++){ score[i] = size[i] * b[i]; sum += score[i]; for(int j: G[i]) score[i] += b[j]; } priority_queue<P> pq; for(int i = 0; i < N; i++){ score[i] = a[i] - score[i]; if(score[i] > 0) pq.push(P(score[i], i)); } while(!pq.empty()){ P v = pq.top(); pq.pop(); long long temp = v.first; int ind = v.second; if(used[ind] == 1) continue; used[ind] = 1; sum += temp; for(int j: G[ind]){ score[j] += b[ind]; if(score[j] > 0 && used[j] == 0) pq.push(P(score[j], j)); } } cout << sum << endl; }