結果
問題 | No.1488 Max Score of the Tree |
ユーザー |
![]() |
提出日時 | 2021-04-23 21:58:27 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 87 ms / 2,000 ms |
コード長 | 4,699 bytes |
コンパイル時間 | 1,683 ms |
コンパイル使用メモリ | 179,500 KB |
実行使用メモリ | 82,304 KB |
最終ジャッジ日時 | 2024-07-04 07:58:47 |
合計ジャッジ時間 | 3,771 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define int long long#define stoi stollusing pii = pair<int, int>;using vi = vector<int>;using vvi = vector<vi>;using vb = vector<bool>;using vvb = vector<vb>;template <class T>using heap = priority_queue<T, deque<T>, greater<T>>;#define all(c) begin(c), end(c)#define rall(c) rbegin(c), rend(c)#define fore(x, c) for (auto &&x : c)#define rep(i, a, n) for (int i = (int)(a), i##len = (int)(n); i < i##len; ++i)#define rrep(i, a, n) for (int i = (int)(n - 1); i >= a; --i)#define pb push_back#define eb emplace_back#define dump(...)const signed INF_ = 1001001001;const long long INF = 1001001001001001001LL;const int DX[9] = {0, 1, 0, -1, 1, 1, -1, -1, 0},DY[9] = {-1, 0, 1, 0, -1, 1, 1, -1, 0};template <class C>int sz(const C &c) {return (int)c.size();}template <class C, class T>bool contains(const C &c, const T &v) {return c.find(v) != c.end();}template <class T>bool inseg(const T &l, const T &x, const T &r) {return l <= x && x < r;}template <class T, class U>ostream &operator<<(ostream &os, const pair<T, U> &p) {return os << p.first << " " << p.second;}template <class T, class U>istream &operator>>(istream &is, pair<T, U> &p) {return is >> p.first >> p.second;}template <class T, class C>ostream &ostream_container_impl(ostream &os, const C &v) {if (v.empty()) return os;auto itr = begin(v), prv = prev(end(v));while (itr != prv) os << *itr++ << " ";return os << *prv;}template <class T>ostream &operator<<(ostream &os, const vector<T> &v) {return ostream_container_impl<T>(os, v);}template <class T>ostream &operator<<(ostream &os, const deque<T> &v) {return ostream_container_impl<T>(os, v);}template <class T>ostream &operator<<(ostream &os, const set<T> &v) {return ostream_container_impl<T>(os, v);}template <class T>istream &operator>>(istream &is, vector<T> &v) {for (auto &x : v) is >> x;return is;}template <class T, class U>bool chmax(T &a, const U &b) {return a < b ? a = b, 1 : 0;}template <class T, class U>bool chmin(T &a, const U &b) {return a > b ? a = b, 1 : 0;}template <class T>void psum(T &c) {partial_sum(begin(c), end(c), begin(c));}template <class T>void decrement(T &x) {x -= 1;}template <class T, class U>void decrement(pair<T, U> &p) {decrement(p.first);decrement(p.second);}template <class T>void decrement(vector<T> &v) {for (auto &x : v) decrement(x);}template <class T>void increment(T &x) {x += 1;}template <class T, class U>void incrment(pair<T, U> &p) {increment(p.first);increment(p.second);}template <class T>void increment(vector<T> &v) {for (auto &x : v) increment(x);}#if defined(LOCAL)void dump_impl(string s) { assert(s.empty()); }template <class H, class... T>void dump_impl(string s, const H &head, const T &...tail) {int par = 0;rep(i, 0, sz(s)) {char ch = s[i];if (ch == ',' && par == 0) {cerr << " = " << head << ",";dump_impl(s.substr(i + 1), tail...);return;} else {cerr << ch;if (ch == '(') par++;if (ch == ')') par--;}}}#ifdef dump#undef dump#endif#define dump(...) \do { \cerr << "\x1b[33;1m"; \dump_impl(#__VA_ARGS__ ",", __VA_ARGS__); \cerr << "\x1b[0m" << endl; \} while (0)#endifstruct before_main_function {before_main_function() {#if defined(LOCAL) && defined(int)cerr << "\x1b[7m"<< "'int' is 'long long'"<< "\x1b[m" << endl;#endifcin.tie(nullptr);ios::sync_with_stdio(false);cout << setprecision(15) << fixed;}} before_main_function;//------------------8<------------------------------------8<--------------------signed main() {int N, K;cin >> N >> K;vi L(N - 1), C(N - 1);vector<vector<pii>> T(N);rep(i, 0, N - 1) {int a, b, c;cin >> a >> b >> c;L[i] = c;a--, b--;T[a].eb(b, i);T[b].eb(a, i);}auto dfs = [&](auto &f, int v, int p) -> int {int ret = 0;for (pii e : T[v]) {int w, i;tie(w, i) = e;if (w == p) continue;int t = f(f, w, v);C[i] += t;ret += t;}if (v && sz(T[v]) == 1) ret += 1;return ret;};dfs(dfs, 0, -1);vvi dp(N, vi(K + 1));rep(i, 0, N - 1) {rep(j, 0, K + 1) {chmax(dp[i + 1][j], dp[i][j] + L[i] * C[i]);if (j + L[i] <= K) {chmax(dp[i + 1][j + L[i]], dp[i][j] + 2 * L[i] * C[i]);}}}int ans = 0;rep(i, 0, K + 1) { chmax(ans, dp[N - 1][i]); }cout << ans << endl;}