結果
問題 |
No.417 チューリップバブル
|
ユーザー |
|
提出日時 | 2025-04-25 20:13:56 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 319 ms / 2,000 ms |
コード長 | 1,029 bytes |
コンパイル時間 | 2,584 ms |
コンパイル使用メモリ | 204,940 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-04-25 20:14:04 |
合計ジャッジ時間 | 7,866 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
#include<bits/stdc++.h> using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<48||ch>57) { if(ch==45)f=-1; ch=getchar(); } while(ch>=48&&ch<=57) { x=(x<<1)+(x<<3)+(ch&15); ch=getchar(); } return x*f; } inline void write(int x) { if(x<0)x=-x,putchar(45); if(x>9)write(x/10); putchar(x%10+48); return; } int n,m,tax[201],f[201][2001]; vector<pair<int,int>>mp[201]; inline void dfs(int x,int fa) { for(int i=0;i<=m;++i)f[x][i]=tax[x]; for(auto&t:mp[x]) { int v=t.first,w=t.second*2; if(v==fa)continue; dfs(v,x); for(int i=m;i>=w;--i) for(int j=w;j<=i;++j) f[x][i]=max(f[x][i],f[x][i-j]+f[v][j-w]); } return; } int main() { //freopen("tulip.in","r",stdin); //freopen("tulip.out","w",stdout); n=read(),m=read(); for(int i=1;i<=n;++i)tax[i]=read(); for(int i=1;i<n;++i) { int u=read()+1,v=read()+1,w=read(); mp[u].emplace_back(v,w); mp[v].emplace_back(u,w); } dfs(1,-1); int ans=0; for(int i=0;i<=m;++i)ans=max(ans,f[1][i]); write(ans); return 0; }