답안 #244481

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
244481 2020-07-04T06:58:31 Z kshitij_sodani Museum (CEOI17_museum) C++17
80 / 100
3000 ms 746004 KB
#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'

int n,k,x;
vector<pair<int,int>> adj[10001];
int dp[10001][10001][2];
//0-return
//1-don't return
int ss[1001];
int min2(int aa,int bb){
	if(aa==-1){
		return bb;
	}
	return min(aa,bb);
}
void dfs(int no,int par=-1){

	ss[no]=1;

	for(auto j:adj[no]){
		if(j.a==par){
			continue;
		}
		dfs(j.a,no);
		ss[no]+=ss[j.a];
	}
	int cur=0;
	dp[no][1][1]=0;
	dp[no][1][0]=0;
	for(auto j:adj[no]){
		if(j.a==par){
			continue;
		}
		cur+=ss[j.a];
		for(int i=min(cur+1,k);i>=2;i--){
			for(int kk=1;kk<=min(i-1,ss[j.a]);kk++){
				if(dp[no][i-kk][0]>-1){
					dp[no][i][0]=min2(dp[no][i][0],dp[no][i-kk][0]+dp[j.a][kk][0]+2*j.b);
					dp[no][i][1]=min2(dp[no][i][1],dp[no][i-kk][0]+dp[j.a][kk][1]+j.b);

				}
				if(dp[no][i-kk][1]>-1){
					dp[no][i][1]=min2(dp[no][i][1],dp[no][i-kk][1]+dp[j.a][kk][0]+2*j.b);
				}
			}
		}
	}
	/*cout<<no<<endl;
	for(int j=1;j<=ss[no];j++){
		cout<<dp[no][j][0]<<",";
	}
	cout<<endl;
	for(int j=1;j<=ss[no];j++){
		cout<<dp[no][j][1]<<",";
	}
	cout<<endl;
*/


}



int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n>>k>>x;
	x--;
	for(int i=0;i<n-1;i++){
		int aa,bb,cc;
		cin>>aa>>bb>>cc;
		aa--;
		bb--;
		adj[aa].pb({bb,cc});
		adj[bb].pb({aa,cc});
	}
	for(int i=0;i<n;i++){
		for(int j=1;j<=k;j++){
			dp[i][j][0]=-1;
			dp[i][j][1]=-1;
		}
	}
	dfs(x);
	cout<<min(dp[x][k][1],dp[x][k][0])<<endl;
	



	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 640 KB Output is correct
2 Correct 5 ms 640 KB Output is correct
3 Correct 5 ms 640 KB Output is correct
4 Correct 5 ms 640 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 50304 KB Output is correct
2 Correct 47 ms 50304 KB Output is correct
3 Correct 69 ms 50560 KB Output is correct
4 Correct 55 ms 50424 KB Output is correct
5 Correct 55 ms 50304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 50304 KB Output is correct
2 Correct 47 ms 50304 KB Output is correct
3 Correct 69 ms 50560 KB Output is correct
4 Correct 55 ms 50424 KB Output is correct
5 Correct 55 ms 50304 KB Output is correct
6 Correct 43 ms 50296 KB Output is correct
7 Correct 66 ms 50552 KB Output is correct
8 Correct 41 ms 50424 KB Output is correct
9 Correct 41 ms 50432 KB Output is correct
10 Correct 40 ms 50432 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 640 KB Output is correct
2 Correct 5 ms 640 KB Output is correct
3 Correct 5 ms 640 KB Output is correct
4 Correct 5 ms 640 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 44 ms 50304 KB Output is correct
7 Correct 47 ms 50304 KB Output is correct
8 Correct 69 ms 50560 KB Output is correct
9 Correct 55 ms 50424 KB Output is correct
10 Correct 55 ms 50304 KB Output is correct
11 Correct 43 ms 50296 KB Output is correct
12 Correct 66 ms 50552 KB Output is correct
13 Correct 41 ms 50424 KB Output is correct
14 Correct 41 ms 50432 KB Output is correct
15 Correct 40 ms 50432 KB Output is correct
16 Correct 178 ms 120824 KB Output is correct
17 Correct 766 ms 433400 KB Output is correct
18 Correct 1189 ms 120952 KB Output is correct
19 Correct 123 ms 120824 KB Output is correct
20 Correct 144 ms 120816 KB Output is correct
21 Execution timed out 3104 ms 746004 KB Time limit exceeded
22 Halted 0 ms 0 KB -