// Problem: 1575:【例 1】二叉苹果树 // Contest: SSOIER // URL: http://ybt.ssoier.cn:8088/problem_show.php?pid=1575 // Memory Limit: 524 MB // Time Limit: 1000 ms // // Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h> usingnamespace std; //#define int long long inlineintread(){int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+ (x<<3)+(ch^48);ch=getchar();}return x*f;} //#define M //#define mo #define N 110 structnode { int x, y, z, n; }d[N*2]; int n, m, i, j, k; int dp[N][N], f[N], h[N]; int u, v, w;
voidcun(int x, int y, int z) { d[++k].x=x; d[k].y=y; d[k].z=z; d[k].n=h[x]; h[x]=k; }
voiddfs(int x, int fa) { int g, y, i, j; dp[x][0]=0; for(g=h[x]; g; g=d[g].n) { y=d[g].y; if(y==fa) continue; dfs(y, x); for(i=0; i<=m; ++i) f[i]=dp[x][i]; for(i=1; i<=m; ++i) for(j=1; j<=i; ++j) dp[x][i]=max(dp[x][i], dp[y][j-1]+f[i-j]+d[g].z); } }