Submission #509724

#TimeUsernameProblemLanguageResultExecution timeMemory
509724daongochaPaths (RMI21_paths)C++14
56 / 100
1084 ms13880 KiB
#include <bits/stdc++.h> #define map dsfakuhwkl34hdfs #define int long long #define fileopen(a, b) freopen(((std::string)a + ".inp").c_str(), "r", stdin); freopen(((std::string)b + ".out").c_str(), "w", stdout); #define fileopen1(a) freopen(((std::string)a + ".inp").c_str(), "r", stdin); freopen(((std::string)a + ".out").c_str(), "w", stdout); using namespace std; const int MAXN = 1e5 + 5; vector<pair<int, int>> adj[MAXN]; pair<int, int> st[MAXN << 1]; int n, k; int dep[MAXN]; void build() { for (int i = n; i < 2 * n; i++) st[i].second = i - n + 1, st[i].first = dep[i]; for (int i = n - 1; i >= 1; i--) st[i] = max(st[i << 1], st[i << 1 | 1]); } void upd(int i, int val) { i += n - 1; for (st[i].first = val; i > 1; i >>= 1) st[i >> 1] = min(st[i], st[i ^ 1]); } pair<int, int> query(int l, int r) { l += n - 1; r += n; pair<int, int> ans = {0, 0}; for (; l < r; l >>= 1, r >>= 1) { if (l & 1) ans = max(ans, st[l++]); if (r & 1) ans = max(ans, st[--r]); } return ans; } int par[MAXN]; int num[MAXN]; bool vis[MAXN]; int update(int u) { int ans = 0; for (; !vis[u]; u = par[u]) { ans += num[u]; vis[u] = 1; } return ans; } void dfs(int u, int pre = 0) { par[u] = pre; for (auto vw: adj[u]) { int v = vw.first, w = vw.second; if (v != pre) { dep[v] = dep[u] + w; num[v] = w; dfs(v, u); } } } signed main() { #ifndef PICHU_LOCAL_DEF //fileopen1("LAH"); #endif cin.tie(0)->sync_with_stdio(0); cin >> n >> k; for (int i = 1, u, v, w; i < n; i++) { cin >> u >> v >> w; adj[u].push_back({v, w}); adj[v].push_back({u, w}); } vis[0] = 1; for (int _ = 1; _ <= n; _++) { memset(num, 0, sizeof num); memset(vis, 0, sizeof vis); memset(par, 0, sizeof par); vis[0] = 1; dfs(_); #define pq dsaflkdfssdfdfs vector<pair<int, int>> pq; for (int i = 1; i <= n; i++) pq.push_back({dep[i], i}); sort(pq.rbegin(), pq.rend()); for (int i = 0; i < n; i++) { int u = pq[i].second; dep[u] = update(u); } sort(dep + 1, dep + n + 1, greater<int>()); int res = 0; for (int i = 1; i <= k; i++) res += dep[i]; cout << res << '\n'; #undef pq } // for (int i = 1; i <= n; i++) cout << dep[i] << ' '; cout << '\n'; build(); }
#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...