QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#623957#6107. One PathcjxWA 1ms6020kbC++202.1kb2024-10-09 14:29:252024-10-09 14:29:26

Judging History

你现在查看的是最新测评结果

  • [2024-10-09 14:29:26]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:6020kb
  • [2024-10-09 14:29:25]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
long long read(){
	long long x=0,f=1;char ch=getchar();
	while(!isdigit(ch))
	{if(ch=='-') f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
void write(long long x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
const int N=2010;
int n,k,sz[N];
int head[N],ver[N<<1],nxt[N<<1],tot;
ll edge[N<<1],f[N][N][3];
void add(int x,int y,ll z){
	ver[++tot]=y,edge[tot]=z,nxt[tot]=head[x],head[x]=tot;
}
void dfs1(int x,int fa){
    sz[x]=1;
    f[x][0][0]=f[x][0][1]=-1e10;
    for(int i=head[x];i;i=nxt[i]){
        int y=ver[i];
        if(y==fa)continue;
        dfs1(y,x);
        for(int p=sz[x];p>=0;p--){
            for(int q=1;q<=sz[y];q++){
                f[x][p+q][0]=max(f[x][p+q][0],f[x][p][2]+f[y][q][0]+edge[i]);
                f[x][p+q][0]=max(f[x][p+q][0],f[x][p][2]+f[y][q][2]+edge[i]);
                f[x][p+q][0]=max(f[x][p+q][0],f[x][p][0]+f[y][q][2]);
                f[x][p+q][1]=max(f[x][p+q][1],f[x][p][2]+f[y][q][1]);
                f[x][p+q][1]=max(f[x][p+q][1],f[x][p][0]+f[y][q+1][0]+edge[i]);
                f[x][p+q][1]=max(f[x][p+q][1],f[x][p][1]+f[y][q][2]);
                f[x][p+q][2]=max(f[x][p+q][2],f[x][p][2]+f[y][q][2]);
                f[x][p+q][2]=max(f[x][p+q][2],f[x][p][2]+f[y][q][1]+edge[i]);
            }
            f[x][p][1]=max(f[x][p][1],f[x][p][0]+f[y][1][0]+edge[i]);
        }
        sz[x]+=sz[y];
    }
    for(int i=1;i<=sz[x];i++)
        for(int j=0;j<3;j++){
            f[x][i][j]=max(f[x][i][j],f[x][i-1][j]);
            //printf("f[%d][%d][%d]=%lld\n",x,i,j,f[x][i][j]);
        }
}
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	n=read();k=read();
	for(int i=1;i<n;i++){
        int x=read(),y=read(),z=read();
        add(x,y,z);add(y,x,z);
    }
    dfs1(1,0);
    for(int i=0;i<=k;i++){
        printf("%lld ",f[1][min(i+1,n)][1]);
    }
    puts("");
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3884kb

input:

5 1
1 3 2
4 5 4
3 4 3
2 3 7

output:

14 16 

result:

ok 2 number(s): "14 16"

Test #2:

score: 0
Accepted
time: 0ms
memory: 3868kb

input:

7 2
1 2 4
2 3 6
2 4 2
4 5 5
2 6 1
4 7 3

output:

13 20 21 

result:

ok 3 number(s): "13 20 21"

Test #3:

score: -100
Wrong Answer
time: 1ms
memory: 6020kb

input:

50 2000
3 34 1
37 39 58720256
17 24 14680064
28 39 1
25 38 1
21 29 1
3 30 1
26 36 1
5 48 14336
4 22 1
26 41 1
41 44 1
5 14 1
23 25 28672
40 41 224
27 39 1
4 20 7340032
7 47 939524096
11 46 114688
30 49 3584
34 44 1
7 35 1
10 29 1
27 33 29360128
16 36 56
8 28 1
13 38 57344
34 45 896
15 35 469762048
1...

output:

1484826130 1778427410 1859167762 1873847826 1877517842 1878435346 1878894098 1879008786 1879037458 1879044626 1879047316 1879047990 1879048103 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 1879048160 187...

result:

wrong answer 1st numbers differ - expected: '1409286145', found: '1484826130'