답안 #245828

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
245828 2020-07-07T14:24:50 Z kshitij_sodani Chase (CEOI17_chase) C++17
40 / 100
2882 ms 524292 KB
/*
https://www.oi.edu.pl/old/ioi/downloads/ioi2005-tasks-and-solutions-a5.pdf
*/
#include <bits/stdc++.h>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
//#define endl '\n'
llo n,m;
llo it[100001];
llo co[100001];
vector<llo> adj[100001];
llo dp[100001][101][2];
llo dp2[100001][101][2];
llo ans=0;
vector<pair<llo,int>> ac[101][2];
void dfs(llo no,llo par2=-1){
	for(llo i=1;i<=m;i++){
		dp[no][i][0]=0;
		dp2[no][i][0]=0;
		dp[no][i][1]=co[no];
		dp2[no][i][1]=co[no];
	}
	
	for(auto j:adj[no]){
		if(j==par2){
			continue;
		}
		dfs(j,no);
	}
	for(int i=0;i<=m;i++){
		ac[i][0].clear();
		ac[i][1].clear();
	}
	for(auto j:adj[no]){
		if(j==par2){
			continue;
		}
		for(llo i=0;i<=m;i++){
			llo x=0;
			llo y=0;
			if(i>0){
				x=max(x,dp[j][i-1][0]+co[no]);
				if(i>1){
					x=max(x,dp[j][i-1][1]+co[no]-it[no]);
				}
			}
			dp[no][i][1]=max(dp[no][i][1],x);

			y=max(y,dp[j][i][0]);
			if(i>0){
				y=max(y,dp[j][i][1]-it[no]);
			}
			dp[no][i][0]=max(dp[no][i][0],y);
			ac[i][0].pb({max(x,y),j});
			x=0;
			y=0;

			if(i>0){
				x=max(x,dp2[j][i-1][0]+co[no]-it[j]);
				if(i>1){
					x=max(x,dp2[j][i-1][1]+co[no]-it[j]);
				}
				y=max(y,dp2[j][i][1]);
			}
			y=max(y,dp2[j][i][0]);
			dp2[no][i][0]=max(dp2[no][i][0],y);
			dp2[no][i][1]=max(dp2[no][i][1],x);
			ac[i][1].pb({max(x,y),j});
		}
	}
	ans=max(ans,dp[no][m][0]);
	ans=max(ans,dp[no][m][1]);
	ans=max(ans,dp2[no][m][0]);
	ans=max(ans,dp2[no][m][1]);

	/*for(llo i=0;i<=m;i++){
		if(ac[i][0].size()>0 and ac[m-i][1].size()>0){
			if(ac[i][0][0].b==ac[m-i][1][0].b){
				if(ac[i][0].size()>1){
					ans=max(ans,ac[i][0][1].a+ac[m-i][1][0].a);
				}
				if(ac[m-i][1].size()>1){
					ans=max(ans,ac[i][0][0].a+ac[m-i][1][1].a);
				}
			}
			else{
				ans=max(ans,ac[i][0][0].a+ac[m-i][1][0].a);
			}
		}
	}

*/


}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n>>m;
	for(llo i=0;i<n;i++){
		cin>>it[i];
	}
	for(llo i=0;i<n-1;i++){
		llo aa,bb;
		cin>>aa>>bb;
		aa--;
		bb--;
		adj[aa].pb(bb);
		adj[bb].pb(aa);
		co[aa]+=it[bb];
		co[bb]+=it[aa];
	}
	if(n<=1000){
		for(int i=0;i<n;i++){
			dfs(i);
		}
	}
	dfs(0);
	cout<<ans<<endl;
//	cout<<max(dp[0][m][1],dp[0][m][0])<<endl;


	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2688 KB Output is correct
2 Correct 7 ms 2688 KB Output is correct
3 Correct 6 ms 2688 KB Output is correct
4 Correct 6 ms 2688 KB Output is correct
5 Correct 7 ms 2688 KB Output is correct
6 Correct 6 ms 2688 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2688 KB Output is correct
2 Correct 7 ms 2688 KB Output is correct
3 Correct 6 ms 2688 KB Output is correct
4 Correct 6 ms 2688 KB Output is correct
5 Correct 7 ms 2688 KB Output is correct
6 Correct 6 ms 2688 KB Output is correct
7 Correct 2882 ms 6124 KB Output is correct
8 Correct 195 ms 6016 KB Output is correct
9 Correct 184 ms 6144 KB Output is correct
10 Correct 2874 ms 6016 KB Output is correct
11 Correct 1040 ms 6136 KB Output is correct
12 Correct 321 ms 6000 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 572 ms 334148 KB Output is correct
2 Correct 563 ms 334140 KB Output is correct
3 Runtime error 580 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2688 KB Output is correct
2 Correct 7 ms 2688 KB Output is correct
3 Correct 6 ms 2688 KB Output is correct
4 Correct 6 ms 2688 KB Output is correct
5 Correct 7 ms 2688 KB Output is correct
6 Correct 6 ms 2688 KB Output is correct
7 Correct 2882 ms 6124 KB Output is correct
8 Correct 195 ms 6016 KB Output is correct
9 Correct 184 ms 6144 KB Output is correct
10 Correct 2874 ms 6016 KB Output is correct
11 Correct 1040 ms 6136 KB Output is correct
12 Correct 321 ms 6000 KB Output is correct
13 Correct 572 ms 334148 KB Output is correct
14 Correct 563 ms 334140 KB Output is correct
15 Runtime error 580 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
16 Halted 0 ms 0 KB -