제출 #702784

#제출 시각아이디문제언어결과실행 시간메모리
702784NursikPaths (RMI21_paths)C++14
48 / 100
1032 ms25292 KiB
#include <iostream> #include <fstream> #include <iomanip> #include <vector> #include <set> #include <map> #include <cstring> #include <string> #include <cmath> #include <cassert> #include <ctime> #include <algorithm> #include <sstream> #include <list> #include <queue> #include <deque> #include <stack> #include <cstdlib> #include <cstdio> #include <iterator> #include <functional> #include <unordered_set> #include <unordered_map> #include <stdio.h> #include <bitset> #include <cstdint> #include <cassert> #include <functional> #include <complex> using namespace std; #define ll long long #define pb push_back #define mp make_pair #define f first #define s second #define ld long double const ll maxn = 2e3 + 10, maxm = 3e5 + 1; const ll mod = 1e9 + 7, cmod = 998244353, inf = 1e9, blcok = 400, p2 = 31; const ld eps = 1e-9; int n, k; int x[maxm], y[maxm], c[maxm], used[maxm], sz[maxm]; ll dp[maxn][maxn]; vector<pair<int, int>> g[maxm]; ll dps[maxm], answ[maxm]; void dfs(int v, int p){ for (int j = 0; j <= k; ++j){ dp[v][j] = -1; } dp[v][0] = 0; dp[v][1] = 0; sz[v] = 1; for (auto to : g[v]){ if (to.f != p){ dfs(to.f, v); for (int j = min(k, sz[v]); j >= 0; --j){ if (dp[v][j] != -1){ for (int j2 = 1; j2 <= min(k, sz[to.f]); ++j2){ if (j + j2 <= k){ dp[v][j + j2] = max(dp[v][j + j2], dp[to.f][j2] + c[to.s] + dp[v][j]); } else{ break; } } } } sz[v] += sz[to.f]; } } } void dfs2(int v = 1, int p = 0){ dps[v] = 0; for (auto to : g[v]){ if (to.f != p){ dfs2(to.f, v); dps[v] = max(dps[v], dps[to.f] + c[to.s]); } } } void pdfs2(int v = 1, int p = 0){ answ[v] = dps[v]; multiset<ll> setik; for (auto to : g[v]){ setik.insert(dps[to.f] + c[to.s]); } for (auto to : g[v]){ if (to.f != p){ ll prevdp = dps[v], prevdp2 = dps[to.f]; ll x = dps[to.f] + c[to.s]; setik.erase(setik.find(x)); dps[v] = *setik.rbegin(); dps[to.f] = max(dps[to.f], dps[v] + c[to.s]); pdfs2(to.f, v); setik.insert(x); dps[v] = prevdp; dps[to.f] = prevdp2; } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> k; for (int i = 1; i < n; ++i){ cin >> x[i] >> y[i] >> c[i]; g[x[i]].pb(mp(y[i], i)); g[y[i]].pb(mp(x[i], i)); } if (k == 1){ dfs2(); pdfs2(); for (int i = 1; i <= n; ++i){ cout << answ[i] << " "; } exit(0); } for (int i = 1; i <= n; ++i){ dfs(i, 0); cout << dp[i][k] << " "; } } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...