UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#200426#197. treeAnonyme100589ms283968kbC++112.0kb2024-01-02 08:55:472024-01-02 12:26:23

answer

#include<bits/stdc++.h>
using namespace std;

#define QwQ330AwA return 0
#define ll long long

const int N = 3005 + 5;
int n, k;
vector < pair <int, int> > e[N];
ll f[N][N][4], g[N][4];
int siz[N];

void ckmin(ll &u, ll v) {
	u = min(u, v);
}

ll merge(ll u, ll v, ll a) {
	return u + v + a;
}

void dfs(int u, int fa) {
	for (int i = 0; i <= n; i++) {
		for (int op = 0; op < 4; op++) f[u][i][op] = 1e18;
	}
	f[u][0][0] = 0;
	f[u][1][1] = 0;
	f[u][1][2] = 0;
	siz[u] = 1;
	for (auto qwq : e[u]) {
		int v = qwq.first, w = qwq.second;
		if (v == fa) continue;
		dfs(v, u);
		for (int i = 0; i <= siz[u] + siz[v]; i++) {
			for (int j = 0; j < 4; j++) {
				g[i][j] = 1e18;
			}
		}
		for (int i = 0; i <= siz[u]; i++) {
			for (int j = 0; j <= siz[v]; j++) {
				ckmin(g[i + j][0], merge(f[u][i][0], f[v][j][0], 0));
				ckmin(g[i + j][1], merge(f[u][i][1], f[v][j][0], 0));
				ckmin(g[i + j][1], merge(f[u][i][0], f[v][j][1], 2 * w));
				ckmin(g[i + j][1], merge(f[u][i][1], f[v][j][1], 2 * w));
				ckmin(g[i + j][2], merge(f[u][i][0], f[v][j][2], w));
				ckmin(g[i + j][2], merge(f[u][i][1], f[v][j][2], w));	
				ckmin(g[i + j][2], merge(f[u][i][2], f[v][j][1], 2 * w));
				ckmin(g[i + j][2], merge(f[u][i][2], f[v][j][0], 0));
				ckmin(g[i + j][3], merge(f[u][i][2], f[v][j][2], w));
				ckmin(g[i + j][3], merge(f[u][i][3], f[v][j][0], 0));
				ckmin(g[i + j][3], merge(f[u][i][3], f[v][j][1], 2 * w));
				ckmin(g[i + j][3], merge(f[u][i][0], f[v][j][3], 2 * w));
				ckmin(g[i + j][3], merge(f[u][i][1], f[v][j][3], 2 * w));				
			}
		}
		siz[u] += siz[v];
		for (int i = 0; i <= siz[u]; i++) {
			for (int j = 0; j< 4; j++) f[u][i][j] = g[i][j];
		}
	}
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> k;
	for (int i = 1, u, v, w; i < n; i++) {
		cin >> u >> v >> w;
		e[u].push_back({v, w});
		e[v].push_back({u, w});
	}
	dfs(1, 0);
	ll ans = 1e18;
	for (int i = 1; i <= n; i++) ans = min(ans, f[i][k][3]);
	cout << ans;
	QwQ330AwA;
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 0ms
memory: 1368kb

input:

10 7
1 2 35129
2 3 42976
3 4 24497
2 5 83165
1 6 4748
5 7 38311
4 8 70052
3 9 3561
8 10 80238

output:

184524

result:

ok single line: '184524'

Test #2:

score: 10
Accepted
time: 92ms
memory: 283736kb

input:

3000 3000
1 2 80232
1 3 31904
1 4 24318
1 5 70898
1 6 54285
1 7 99203
1 8 36858
1 9 52269
1 10 21554...

output:

293195939

result:

ok single line: '293195939'

Test #3:

score: 10
Accepted
time: 0ms
memory: 1612kb

input:

50 32
1 2 78088
1 3 59372
2 4 12219
3 5 17188
2 6 51314
3 7 72028
3 8 1593
4 9 65442
5 10 97450
6 11...

output:

1758096

result:

ok single line: '1758096'

Test #4:

score: 10
Accepted
time: 0ms
memory: 1612kb

input:

50 48
1 2 60240
2 3 71246
3 4 21134
2 5 75461
5 6 4274
6 7 87233
6 8 74521
4 9 81504
8 10 23918
5 11...

output:

3245532

result:

ok single line: '3245532'

Test #5:

score: 10
Accepted
time: 0ms
memory: 3388kb

input:

200 36
1 2 95675
1 3 46068
3 4 92249
2 5 79443
4 6 11920
6 7 28895
4 8 25231
5 9 82622
8 10 34349
8 ...

output:

1214282

result:

ok single line: '1214282'

Test #6:

score: 10
Accepted
time: 0ms
memory: 3396kb

input:

200 35
1 2 97551
2 3 27011
2 4 14709
1 5 27407
2 6 57345
5 7 63132
7 8 89143
4 9 30986
5 10 89545
7 ...

output:

1341305

result:

ok single line: '1341305'

Test #7:

score: 10
Accepted
time: 206ms
memory: 283736kb

input:

3000 666
1 2 65806
1 3 53490
1 4 43794
1 5 63048
1 6 10670
1 7 56872
1 8 71919
1 9 78642
1 10 9831
1...

output:

14876698

result:

ok single line: '14876698'

Test #8:

score: 10
Accepted
time: 159ms
memory: 283968kb

input:

3000 1633
1 2 73534
2 3 97254
3 4 96323
4 5 88456
5 6 287
6 7 7380
7 8 63246
8 9 57273
9 10 23915
10...

output:

74678010

result:

ok single line: '74678010'

Test #9:

score: 10
Accepted
time: 61ms
memory: 283740kb

input:

3000 2612
1 2 85560
1 3 99187
1 4 40779
1 5 70190
1 6 50395
1 7 9810
1 8 87504
1 9 600
1 10 78858
1 ...

output:

231082152

result:

ok single line: '231082152'

Test #10:

score: 10
Accepted
time: 71ms
memory: 283884kb

input:

3000 858
1 2 51625
1 3 28801
1 4 85825
3 5 92506
5 6 76389
4 7 74801
3 8 49889
6 9 81981
9 10 73122
...

output:

38161665

result:

ok single line: '38161665'