UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#151107#9. 小h的树lzy100118ms41176kbC++1.9kb2022-07-26 16:58:282022-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