Submission #245840

# Submission time Handle Problem Language Result Execution time Memory
245840 2020-07-07T15:02:26 Z kshitij_sodani Chase (CEOI17_chase) C++17
40 / 100
1054 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][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][0].clear();
		ac[i][1][0].clear();
		ac[i][1][1].clear();
		ac[i][0][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][1].pb({x,j});
			ac[i][0][0].pb({y,j});
		//	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][0].pb({y,j});
			ac[i][1][1].pb({x,j});
		//	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++){
		for(int k=0;k<2;k++){
			for(int l=0;l<2;l++){
				sort(ac[i][k][l].begin(),ac[i][k][l].end());
				reverse(ac[i][k][l].begin(),ac[i][k][l].end());
			}
		}
		for(int k=0;k<2;k++){
			for(int l=0;l<2;l++){
				if(l==1 and k==1){
					continue;
				}
				if(l==0 and k==1){
					continue;
				}
			
				if(ac[i][0][k].size()>0 and ac[m-i][1][l].size()>0){
					if(ac[i][0][k][0].b==ac[m-i][1][l][0].b){
						if(ac[i][0][k].size()>1){
							ans=max(ans,ac[i][0][k][1].a+ac[m-i][1][l][0].a);
						}
						if(ac[m-i][1][l].size()>1){
							ans=max(ans,ac[i][0][k][0].a+ac[m-i][1][l][1].a);
						}
					}
					else{
						ans=max(ans,ac[i][0][k][0].a+ac[m-i][1][l][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;
}
# Verdict Execution time Memory Grader output
1 Correct 6 ms 2816 KB Output is correct
2 Correct 6 ms 2688 KB Output is correct
3 Correct 6 ms 2688 KB Output is correct
4 Correct 7 ms 2816 KB Output is correct
5 Correct 6 ms 2688 KB Output is correct
6 Correct 6 ms 2816 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 2816 KB Output is correct
2 Correct 6 ms 2688 KB Output is correct
3 Correct 6 ms 2688 KB Output is correct
4 Correct 7 ms 2816 KB Output is correct
5 Correct 6 ms 2688 KB Output is correct
6 Correct 6 ms 2816 KB Output is correct
7 Correct 15 ms 6144 KB Output is correct
8 Correct 8 ms 6016 KB Output is correct
9 Correct 10 ms 6248 KB Output is correct
10 Correct 20 ms 5984 KB Output is correct
11 Correct 13 ms 6016 KB Output is correct
12 Correct 9 ms 5888 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 954 ms 331312 KB Output is correct
2 Correct 1054 ms 331344 KB Output is correct
3 Runtime error 676 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 2816 KB Output is correct
2 Correct 6 ms 2688 KB Output is correct
3 Correct 6 ms 2688 KB Output is correct
4 Correct 7 ms 2816 KB Output is correct
5 Correct 6 ms 2688 KB Output is correct
6 Correct 6 ms 2816 KB Output is correct
7 Correct 15 ms 6144 KB Output is correct
8 Correct 8 ms 6016 KB Output is correct
9 Correct 10 ms 6248 KB Output is correct
10 Correct 20 ms 5984 KB Output is correct
11 Correct 13 ms 6016 KB Output is correct
12 Correct 9 ms 5888 KB Output is correct
13 Correct 954 ms 331312 KB Output is correct
14 Correct 1054 ms 331344 KB Output is correct
15 Runtime error 676 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
16 Halted 0 ms 0 KB -