QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#248121 | #6430. Monster Hunter | Lionel_ZQY# | WA | 1ms | 3464kb | C++20 | 1.8kb | 2023-11-11 17:34:33 | 2023-11-11 17:34:33 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
void solve(){
int n;
cin>>n;
vector<int> edge[n+1],fa(n+1);
vector<i64> hp(n+1),g(n+1),ans1(n+1);
vector<bool> vis(n+1);
for(int i=2;i<=n;i++){
int u;
cin>>u;
edge[u].push_back(i);
fa[i]=u;
}
fa[1]=0;
vis[0]=true;
for(int i=1;i<=n;i++){
cin>>hp[i];
}
auto h=g,ans2=ans1;
function<void(int)> dfs=[&](int u){
for(auto x:edge[u]){
dfs(x);
g[u]+=hp[x];
}
ans1[0]+=hp[u]+g[u];
};
dfs(1);
for(int i=1;i<=n;i++){
i64 res=0,v=0;
for(int j=1;j<=n;j++){
if(vis[j]) continue;
if(res<(vis[fa[j]]?1LL:2LL)*hp[j]+g[j]){
res=(vis[fa[j]]?1LL:2LL)*hp[j]+g[j];
v=j;
}
}
// cout<<i <<' '<<v<<'\n';
ans1[i]=ans1[i-1]-res;
vis[v]=true;
g[fa[v]]-=hp[v];
// if(i==8){
// for(int j=1;j<=n;j++){
// if(!vis[j]) cout<<j<<' ';
// }
// cout<<'\n';
// }
}
vis.assign(n+1,false);
ans2[n]=0;
for(int i=n-1;i>=0;i--){
i64 res=1e18,v=0;
for(int j=1;j<=n;j++){
if(vis[j]) continue;
if(res>(vis[fa[j]]?2LL:1LL)*hp[j]+h[j]){
res=(vis[fa[j]]?2LL:1LL)*hp[j]+h[j];
v=j;
}
}
ans2[i]=ans2[i+1]+res;
vis[v]=true;
h[fa[v]]+=hp[v];
}
for(int i=0;i<=n;i++){
cout<<min(ans1[i],ans2[i])<<" \n"[i==n];
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3464kb
input:
3 5 1 2 3 4 1 2 3 4 5 9 1 2 3 4 3 4 6 6 8 4 9 4 4 5 2 4 1 12 1 2 2 4 5 3 4 3 8 10 11 9 1 3 5 10 10 7 3 7 9 4 9
output:
29 16 9 4 1 0 74 47 35 25 15 11 7 3 1 0 145 115 93 73 55 42 32 22 14 8 4 1 0
result:
ok 29 tokens
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 3448kb
input:
179 20 1 1 1 4 5 5 7 7 9 9 11 12 13 14 5 16 17 16 19 3 9 3 2 7 7 2 8 5 7 5 4 7 4 2 4 9 2 7 9 19 1 1 3 4 3 6 7 6 6 10 10 12 13 13 12 16 16 18 8 8 3 6 10 1 1 1 2 2 3 3 3 10 5 5 7 10 5 2 1 10 4 2 1 2 7 14 1 1 3 4 4 6 4 8 9 10 11 8 13 4 4 6 6 10 8 9 5 7 1 4 7 9 8 6 1 2 3 3 5 2 7 5 6 1 6 11 1 2 3 3 5 6 6...
output:
209 182 159 137 117 99 81 65 56 47 39 32 25 19 15 11 8 6 4 2 0 178 151 129 108 89 74 64 54 44 36 29 24 19 14 11 8 5 2 1 0 18 4 0 16 2 0 172 137 111 93 78 63 49 39 31 23 16 10 5 1 0 52 33 21 9 3 1 0 109 72 53 39 29 22 16 10 5 2 1 0 105 69 47 35 25 17 12 7 3 0 156 133 113 97 82 68 56 44 33 26 19 14 10...
result:
wrong answer 33rd words differ - expected: '23', found: '24'