답안 #245827

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
245827 2020-07-07T14:23:49 Z kshitij_sodani Chase (CEOI17_chase) C++17
40 / 100
2875 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,llo>> 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 6 ms 2688 KB Output is correct
2 Correct 6 ms 2688 KB Output is correct
3 Correct 6 ms 2816 KB Output is correct
4 Correct 6 ms 2688 KB Output is correct
5 Correct 6 ms 2688 KB Output is correct
6 Correct 6 ms 2688 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2688 KB Output is correct
2 Correct 6 ms 2688 KB Output is correct
3 Correct 6 ms 2816 KB Output is correct
4 Correct 6 ms 2688 KB Output is correct
5 Correct 6 ms 2688 KB Output is correct
6 Correct 6 ms 2688 KB Output is correct
7 Correct 2875 ms 6144 KB Output is correct
8 Correct 192 ms 6016 KB Output is correct
9 Correct 181 ms 6264 KB Output is correct
10 Correct 2844 ms 6056 KB Output is correct
11 Correct 891 ms 6016 KB Output is correct
12 Correct 312 ms 5888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 580 ms 331624 KB Output is correct
2 Correct 581 ms 333304 KB Output is correct
3 Runtime error 617 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 6 ms 2688 KB Output is correct
2 Correct 6 ms 2688 KB Output is correct
3 Correct 6 ms 2816 KB Output is correct
4 Correct 6 ms 2688 KB Output is correct
5 Correct 6 ms 2688 KB Output is correct
6 Correct 6 ms 2688 KB Output is correct
7 Correct 2875 ms 6144 KB Output is correct
8 Correct 192 ms 6016 KB Output is correct
9 Correct 181 ms 6264 KB Output is correct
10 Correct 2844 ms 6056 KB Output is correct
11 Correct 891 ms 6016 KB Output is correct
12 Correct 312 ms 5888 KB Output is correct
13 Correct 580 ms 331624 KB Output is correct
14 Correct 581 ms 333304 KB Output is correct
15 Runtime error 617 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
16 Halted 0 ms 0 KB -