結果
| 問題 |
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;
}