結果
問題 |
No.417 チューリップバブル
|
ユーザー |
|
提出日時 | 2025-04-18 22:08:42 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 86 ms / 2,000 ms |
コード長 | 831 bytes |
コンパイル時間 | 2,084 ms |
コンパイル使用メモリ | 196,604 KB |
実行使用メモリ | 7,848 KB |
最終ジャッジ日時 | 2025-04-18 22:08:52 |
合計ジャッジ時間 | 4,318 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define int long long #define pr pair<int,int> #define pb push_back #define mk make_pair #define fi first #define se second #define N 210 #define M 2100 int n,m,dp[N][M],cnt[M],now[M],u,v,w,ans; vector<pr> g[N]; void dfs(int x,int from){ memset(now,0,sizeof(now)); for(int i=0;i<=m;i++){ dp[x][i]=cnt[x]; } for(auto v:g[x]){ if(v.fi!=from){ dfs(v.fi,x); for(int k=m/2*2;k>=v.se*2;k-=2){ for(int j=0;j<=k-2*v.se;j+=2){ dp[x][k]=max(dp[x][k],dp[x][k-j-2*v.se]+dp[v.fi][j]); } } } } return ; } signed main(){ cin>>n>>m; for(int i=1;i<=n;i++){ cin>>cnt[i]; } for(int i=1;i<=n-1;i++){ cin>>u>>v>>w; u++; v++; g[u].pb(mk(v,w)); g[v].pb(mk(u,w)); } dfs(1,0); for(int i=0;i<=m;i++){ ans=max(ans,dp[1][i]); } cout<<ans<<endl; return 0; }