ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#151107 | #9. 小h的树 | lzy | 100 | 118ms | 41176kb | C++ | 1.9kb | 2022-07-26 16:58:28 | 2022-07-26 16:58:29 |
answer
#include<bits/stdc++.h>
using namespace std;
#define F(i,a,b) for(int i=a;i<=b;i++)
#define D(i,a,b) for(int i=a;i>=b;i--)
#define ms(i,a) memset(a,i,sizeof(a))
template <class T> void read(T &x){
x=0; int w=0; char c=getchar();
while (c<'0' || c>'9' ) w+=c=='-',c=getchar();
while (c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
if(w) x=-x;
}
template <class T> void chkmin(T &x,T y) {x=min(x,y);}
template <class T> void chkmax(T &x,T y) {x=max(x,y);}
template <class T >void write( T x){
if(x<0) x=-x,putchar('-');
if(x>9) write(x/10);
putchar(x% 10+48);
}
template <class T >void writeln(T x){
write(x);
putchar('\n');
}
int const maxn=3003;
int const inf=1e9;
struct Edge{
int to,nt,w;
}E[maxn<<1];
int n,k,sz[maxn],dp[maxn][maxn][3],H[maxn],cnt;
void add(int a,int b,int c){
E[cnt]=(Edge){b,H[a],c}; H[a]=cnt++;
}
void merge(int x,int y,int len){
F(i,sz[x]+1,sz[x]+sz[y]) dp[x][i][0]=dp[x][i][1]=dp[x][i][2]=inf;
D(i,sz[x],1) F(j,1,sz[y]){
chkmin(dp[x][i+j][0],dp[x][i][0]+dp[y][j][0]+len*2);
chkmin(dp[x][i+j][1],dp[x][i][1]+dp[y][j][0]+len*2);
chkmin(dp[x][i+j][1],dp[x][i][0]+dp[y][j][1]+len);
chkmin(dp[x][i+j][2],dp[x][i][2]+dp[y][j][0]+len*2);
chkmin(dp[x][i+j][2],dp[x][i][1]+dp[y][j][1]+len);
chkmin(dp[x][i+j][2],dp[x][i][0]+dp[y][j][2]+len*2);
}
sz[x]+=sz[y];
}
void dfs(int x,int fa){
sz[x]=1;
for(int i=H[x];i!=-1;i=E[i].nt){
int v=E[i].to;
if(v==fa) continue;
dfs(v,x);
merge(x,v,E[i].w);
}
}
int main(){
read(n);
read(k);
ms(-1,H);
F(i,1,n-1){
int x,y,z;
read(x);read(y); read(z);
add(x,y,z);
add(y,x,z);
}
dfs(1,1);
int ans=inf;
F(i,1,n) if(sz[i]>=k) chkmin(ans,dp[i][k][2]);
writeln(ans);
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 0ms
memory: 1164kb
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 1 number(s): "184524"
Test #2:
score: 10
Accepted
time: 23ms
memory: 1260kb
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 1 number(s): "293195939"
Test #3:
score: 10
Accepted
time: 0ms
memory: 1276kb
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 1 number(s): "1758096"
Test #4:
score: 10
Accepted
time: 0ms
memory: 1260kb
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 1 number(s): "3245532"
Test #5:
score: 10
Accepted
time: 0ms
memory: 7492kb
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 1 number(s): "1214282"
Test #6:
score: 10
Accepted
time: 0ms
memory: 7480kb
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 1 number(s): "1341305"
Test #7:
score: 10
Accepted
time: 30ms
memory: 1260kb
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 1 number(s): "14876698"
Test #8:
score: 10
Accepted
time: 24ms
memory: 36572kb
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 1 number(s): "74678010"
Test #9:
score: 10
Accepted
time: 22ms
memory: 1524kb
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 1 number(s): "231082152"
Test #10:
score: 10
Accepted
time: 19ms
memory: 41176kb
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 1 number(s): "38161665"
Extra Test:
score: 0
Extra Test Passed