QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#367156#6430. Monster HunterrobertfanWA 2ms3856kbC++141.4kb2024-03-25 19:32:022024-03-25 19:32:02

Judging History

你现在查看的是最新测评结果

  • [2024-03-25 19:32:02]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3856kb
  • [2024-03-25 19:32:02]
  • 提交

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
*/

Details

Tip: Click on the bar to expand more detailed information

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'