답안 #716961

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
716961 2023-03-31T13:56:10 Z Dan4Life Museum (CEOI17_museum) C++17
80 / 100
1320 ms 1048576 KB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define sz(a) (int)a.size()
#define all(a) a.begin(),a.end()
const int mxN=(int)1e4+10;
const int LINF = (int)1e9;
int n, k, s, sub[mxN];
vector<pair<int,int>> adj[mxN];
int dp[mxN][mxN][2], dp2[mxN][mxN][2];
 
int findSize(int s, int p){
	sub[s]=1;
	for(auto [u,w] : adj[s])
		if(u!=p) sub[s]+=findSize(u,s);
	return sub[s];
}
 
void dfs(int s, int p){
	vector<pair<int,int>> v; v.clear();
	for(auto [u,w] : adj[s])
		if(u!=p) dfs(u,s), v.pb({u,w});
	dp[s][1][0]=dp[s][1][1]=0;
	if(!sz(v)) return;
	for(int i = 0; i <= sz(v); i++)
		for(int j = 0; j <= k; j++)
			dp2[i][j][0]=dp2[i][j][1]=LINF;
	dp2[0][0][0] = dp2[0][0][1] = 0; int tot = 1;
	for(int i = 1; i <= sz(v); i++){
		auto u = v[i-1].fi; tot+=sub[u];
		for(int j = 0; j <= k; j++){
			for(int x = 0; x < 2; x++){
				dp2[i][j][x] = min(dp2[i][j][x],dp2[i-1][j][x]);
				for(int l = max(1,j-tot+sub[u]); l <= min(j,sub[u]); l++){
					dp2[i][j][x] = min(dp2[i][j][x], dp2[i-1][j-l][x]+dp[u][l][1]+2*v[i-1].se);
					if(!x)dp2[i][j][x] = min(dp2[i][j][x], dp2[i-1][j-l][1]+dp[u][l][0]+v[i-1].se);
				}
			}
		}
	}
	for(int i = 2; i <= k; i++)
		for(int j = 0; j < 2; j++)
			dp[s][i][j] = min(dp[s][i][j],dp2[sz(v)][i-1][j]);
}

int32_t main()
{
    ios_base::sync_with_stdio(false); cin.tie(0);
    cin >> n >> k >> s;
	for(int i = 0; i < mxN; i++)
		for(int j = 0; j < mxN; j++)
			dp[i][j][0]=dp[i][j][1]=LINF;
	for(int i = 1; i < n; i++){
		int a, b, c; cin >> a >> b >> c;
		adj[a].pb({b,c}), adj[b].pb({a,c});
	}
	findSize(s,-1); dfs(s,-1); cout << dp[s][k][0];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 338 ms 784864 KB Output is correct
2 Correct 395 ms 784868 KB Output is correct
3 Correct 329 ms 784892 KB Output is correct
4 Correct 325 ms 784844 KB Output is correct
5 Correct 359 ms 784952 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 346 ms 785280 KB Output is correct
2 Correct 355 ms 785332 KB Output is correct
3 Correct 356 ms 786024 KB Output is correct
4 Correct 360 ms 785548 KB Output is correct
5 Correct 351 ms 785272 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 346 ms 785280 KB Output is correct
2 Correct 355 ms 785332 KB Output is correct
3 Correct 356 ms 786024 KB Output is correct
4 Correct 360 ms 785548 KB Output is correct
5 Correct 351 ms 785272 KB Output is correct
6 Correct 357 ms 785272 KB Output is correct
7 Correct 363 ms 785964 KB Output is correct
8 Correct 366 ms 834868 KB Output is correct
9 Correct 351 ms 795424 KB Output is correct
10 Correct 353 ms 785860 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 338 ms 784864 KB Output is correct
2 Correct 395 ms 784868 KB Output is correct
3 Correct 329 ms 784892 KB Output is correct
4 Correct 325 ms 784844 KB Output is correct
5 Correct 359 ms 784952 KB Output is correct
6 Correct 346 ms 785280 KB Output is correct
7 Correct 355 ms 785332 KB Output is correct
8 Correct 356 ms 786024 KB Output is correct
9 Correct 360 ms 785548 KB Output is correct
10 Correct 351 ms 785272 KB Output is correct
11 Correct 357 ms 785272 KB Output is correct
12 Correct 363 ms 785964 KB Output is correct
13 Correct 366 ms 834868 KB Output is correct
14 Correct 351 ms 795424 KB Output is correct
15 Correct 353 ms 785860 KB Output is correct
16 Correct 488 ms 785356 KB Output is correct
17 Correct 967 ms 785572 KB Output is correct
18 Correct 470 ms 785740 KB Output is correct
19 Correct 481 ms 845648 KB Output is correct
20 Correct 462 ms 786092 KB Output is correct
21 Correct 1300 ms 786268 KB Output is correct
22 Correct 1320 ms 785788 KB Output is correct
23 Runtime error 424 ms 1048576 KB Execution killed with signal 9
24 Halted 0 ms 0 KB -