結果
問題 | No.417 チューリップバブル |
ユーザー |
|
提出日時 | 2016-08-27 09:18:38 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 340 ms / 2,000 ms |
コード長 | 1,263 bytes |
コンパイル時間 | 1,928 ms |
コンパイル使用メモリ | 174,568 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-08 18:58:55 |
合計ジャッジ時間 | 6,284 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
#include "bits/stdc++.h"using namespace std;#define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i))#define rep(i,j) FOR(i,0,j)#define each(x,y) for(auto &(x):(y))#define mp make_pair#define all(x) (x).begin(),(x).end()#define debug(x) cout<<#x<<": "<<(x)<<endl#define smax(x,y) (x)=max((x),(y))#define smin(x,y) (x)=min((x),(y))#define MEM(x,y) memset((x),(y),sizeof (x))#define sz(x) (int)(x).size()typedef long long ll;typedef pair<int, int> pii;typedef vector<int> vi;typedef vector<ll> vll;struct E{int to, w;};int dp[200][2001], M;vector<vector<E>> G;vi U;void f(int u, int p){dp[u][0] = U[u];each(e, G[u]){if(e.to == p)continue;f(e.to, u);for(int m = M-e.w; m >= 0; --m)if(dp[u][m]!=-1){rep(mm, M - m - e.w + 1){smax(dp[u][m + e.w + mm], dp[u][m] + dp[e.to][mm]);}}}rep(i, M)smax(dp[u][i + 1], dp[u][i]);}int main(){int N, a, b, c;cin >> N >> M;G.resize(N);U.resize(N);rep(i, N) scanf("%d", &U[i]);rep(i, N-1){scanf("%d%d%d", &a, &b, &c);c *= 2;G[a].push_back(E{b,c});G[b].push_back(E{a,c});}MEM(dp, -1);f(0, -1);cout << dp[0][M] << endl;}