#include using namespace std; using ll = long long; int dp[201][201][2001]; //dp[i][j][k] //iを頂点とした、jをの子までを選んでkのタイムでの最大の税収 //iそれぞれでナップサックみたいな感じ vector>> M; vector tax; void dfs(int now,int p = -1) { //cout<=0;k++) { dp[now][I+1][j] = max(max(dp[now][I][j], dp[now][I+1][j]), dp[now][I][j-M[now][i].second-k] +dp[M[now][i].first][0][k]); } } I++; } } for(int i = 0;i<2001;i++) { dp[now][0][i] = dp[now][I][i]; } } int main() { int n; cin >> n; int m; cin >> m; tax = vector(n); for(int i = 0;i> tax[i]; } M = vector>>(n); for(int i = 0;i> x >> y >> z; M[x].emplace_back(y,z); M[y].emplace_back(x,z); } dfs(0); cout<