結果
| 問題 | No.1221 木 *= 3 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-09-04 22:55:46 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,391 bytes |
| 記録 | |
| コンパイル時間 | 973 ms |
| コンパイル使用メモリ | 82,984 KB |
| 実行使用メモリ | 17,940 KB |
| 最終ジャッジ日時 | 2024-11-26 20:50:27 |
| 合計ジャッジ時間 | 3,019 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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] + b[j];
if(score[j] > 0 && used[j] == 0) pq.push(P(score[j], j));
}
}
cout << sum << endl;
}