답안 #1088946

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1088946 2024-09-15T15:42:26 Z SamNguyen Museum (CEOI17_museum) C++14
80 / 100
3000 ms 473512 KB
#include <bits/stdc++.h>
using namespace std;

#define INPFILE ".inp"
#define OUTFILE ".out"

const int INF = 3e8 + 7;

template <class T1, class T2>
inline bool minimise(T1 &x, T2 y) {
	if (x > y) { x = y; return true; }
	return false;
}

template <class T>
inline void minimise_pair(pair<T, T> &x, T y) {
	if (x.second > y)
		swap(x.second, y);
	if (x.first > x.second)
		swap(x.second, x.first);
}

const int MAX = 1e4 + 3;
int N, K, ROOT;
vector<pair<int, int>> adj[MAX];

void input() {
	cin >> N >> K >> ROOT;
	for (int t = N - 1; t--; ) {
		int u, v, w; cin >> u >> v >> w;
		adj[u].emplace_back(v, w);
		adj[v].emplace_back(u, w);
	}
}

int dp[2][MAX][MAX], sz[MAX];

void dfs(int u, int p) {
	sz[u] = 1;
	for (const auto &e : adj[u]) {
		int v, w;
		tie(v, w) = e;
		if (v == p) continue;
		dfs(v, u);
		sz[u] += sz[v];
	}

	static int g[MAX][2];
	for (int x = 0; x <= min(K, sz[u]); x++) 
		g[x][false] = g[x][true] = INF;

	g[0][true ] = 0;
	g[0][false] = 0;
	dp[true ][u][0] = 0;
	dp[false][u][0] = 0;

	for (const auto &e : adj[u]) {
		int v, w;
		tie(v, w) = e;
		if (v == p) continue;

		for (int s = min(K, sz[u]); s >= 0; s--) {
			for (int x = 0, y = s; y >= 1; x++, y--) {
				minimise(g[s][true ], g[x][true ] + 2 * w + dp[true ][v][y - 1]);
				minimise(g[s][false], g[x][false] + 2 * w + dp[true ][v][y - 1]);
				minimise(g[s][false], g[x][true ] +     w + dp[false][v][y - 1]);
			}
		}

		for (int k = 1; k <= min(K, sz[u]); k++) {
			minimise(dp[false][u][k], g[k][false]);
			minimise(dp[true ][u][k], g[k][true ]);
		}
	}
}

void solve() {
	if (K == 1) {
		cout << 0;
		return;
	}

	for (int t : {0, 1})
	for (int u = 0; u <= N; u++)
	for (int k = 0; k <= K; k++)
		dp[t][u][k] = INF;
	
	adj[0].emplace_back(ROOT, 0);
	dfs(0, -1);

	int ans = dp[false][0][K];
	cout << ans;
}
	
int main(void) {
	if (fopen(INPFILE, "r")) {
		freopen(INPFILE, "r", stdin);
		freopen(OUTFILE, "w", stdout);
	}
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	input();
	solve();

	return 0;
}

Compilation message

museum.cpp: In function 'int main()':
museum.cpp:97:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |   freopen(INPFILE, "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
museum.cpp:98:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   98 |   freopen(OUTFILE, "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 856 KB Output is correct
2 Correct 1 ms 860 KB Output is correct
3 Correct 0 ms 860 KB Output is correct
4 Correct 0 ms 860 KB Output is correct
5 Correct 0 ms 860 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 90444 KB Output is correct
2 Correct 48 ms 90608 KB Output is correct
3 Correct 92 ms 90712 KB Output is correct
4 Correct 82 ms 90384 KB Output is correct
5 Correct 61 ms 90460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 90444 KB Output is correct
2 Correct 48 ms 90608 KB Output is correct
3 Correct 92 ms 90712 KB Output is correct
4 Correct 82 ms 90384 KB Output is correct
5 Correct 61 ms 90460 KB Output is correct
6 Correct 50 ms 90556 KB Output is correct
7 Correct 123 ms 90708 KB Output is correct
8 Correct 141 ms 90448 KB Output is correct
9 Correct 143 ms 90600 KB Output is correct
10 Correct 163 ms 90448 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 856 KB Output is correct
2 Correct 1 ms 860 KB Output is correct
3 Correct 0 ms 860 KB Output is correct
4 Correct 0 ms 860 KB Output is correct
5 Correct 0 ms 860 KB Output is correct
6 Correct 44 ms 90444 KB Output is correct
7 Correct 48 ms 90608 KB Output is correct
8 Correct 92 ms 90712 KB Output is correct
9 Correct 82 ms 90384 KB Output is correct
10 Correct 61 ms 90460 KB Output is correct
11 Correct 50 ms 90556 KB Output is correct
12 Correct 123 ms 90708 KB Output is correct
13 Correct 141 ms 90448 KB Output is correct
14 Correct 143 ms 90600 KB Output is correct
15 Correct 163 ms 90448 KB Output is correct
16 Correct 165 ms 160928 KB Output is correct
17 Correct 1090 ms 473512 KB Output is correct
18 Correct 2498 ms 161052 KB Output is correct
19 Execution timed out 3061 ms 160848 KB Time limit exceeded
20 Halted 0 ms 0 KB -