#include using namespace std; const int N=200+5,M=2000+5; int n,m,cnt,ans,a[N],f[N][M],head[N]; struct edge{ int to,w,nxt; }e[N<<1]; void add(int u,int v,int w){ e[++cnt]=(edge){v,w,head[u]}; head[u]=cnt; } void dfs(int u,int fa){ // cout<=2*e[i].w;j--) for(int k=2*e[i].w;k<=j;k++) f[u][j]=max(f[u][j],f[v][k-2*e[i].w]+f[u][j-k]); } // cout<