QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#367156 | #6430. Monster Hunter | robertfan | WA | 2ms | 3856kb | C++14 | 1.4kb | 2024-03-25 19:32:02 | 2024-03-25 19:32:02 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
vector<int>g[2005];
long long a[2005],dp[2005][2005][2],tmp[2005][2];
int n;
int sz[2005];
void dfs(int u,int f){
dp[u][0][0]=a[u];
dp[u][1][1]=0;
sz[u]=1;
for(int v:g[u]){
dfs(v,u);
for(int i=0;i<=n;i++){
tmp[i][0]=tmp[i][1]=1e9;
}
sz[u]+=sz[v];
for(int i=sz[u];~i;i--){
for(int j=min(i,sz[v]);~j;j--){
tmp[i][0]=min(tmp[i][0],dp[v][j][1]+dp[u][i-j][0]);
tmp[i][0]=min(tmp[i][0],dp[v][j][0]+dp[u][i-j][0]+a[v]);
tmp[i][1]=min(tmp[i][1],dp[v][j][1]+dp[u][i-j][1]);
tmp[i][1]=min(tmp[i][1],dp[v][j][0]+dp[u][i-j][1]);
}
}
for(int i=0;i<=sz[u];i++)dp[u][i][0]=tmp[i][0],dp[u][i][1]=tmp[i][1];
}
}
int main(){
int T;
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++)g[i].clear();
for(int i=2;i<=n;i++){
int f;
cin>>f;
g[f].push_back(i);
}
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)for(int j=0;j<=n;j++)dp[i][j][0]=dp[i][j][1]=1e9;
dfs(1,0);
for(int i=0;i<=n;i++)cout<<min(dp[1][i][0],dp[1][i][1])<<(i!=n?' ':'\n');
}
}
/*
things to check
0.delete cerr code or use '//'
1.initallize(especially multicases)
2.int overflow/long long mle
3.if make the ans is hard , try 2-divided
4.memory &b-&a
5.function canshu position
6.the format of input
7.size enough ?
8.the name of function
9.stop copying x0->y0
*/
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3644kb
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: 0
Accepted
time: 2ms
memory: 3792kb
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 23 18 13 10 7 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:
ok 2178 tokens
Test #3:
score: -100
Wrong Answer
time: 2ms
memory: 3856kb
input:
177 10 1 2 3 3 3 6 7 8 3 750920741 600457069 885939487 614833472 917972842 716271451 234536309 280049219 394290544 802674020 5 1 2 2 4 381361244 652246733 111336853 652733347 864548837 7 1 2 2 4 4 4 374076965 100213690 316923584 132783452 321143617 617096325 590521323 14 1 1 3 4 4 6 6 6 4 10 11 10 1...
output:
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 628826853 234536309 0 1000000000 1000000000 1000000000 492698097 111336853 0 1000000000 1000000000 1000000000 1000000000 823784001 365780594 100213690 0 1000000000 1000000000 1000000000 1000000000 1000000000 1000...
result:
wrong answer 1st words differ - expected: '11644969567', found: '1000000000'