Submission #1289242

#TimeUsernameProblemLanguageResultExecution timeMemory
1289242ykc0606Paths (RMI21_paths)C++20
56 / 100
1094 ms11340 KiB
#include <bits/stdc++.h> #define fi first #define se second #define int long long #define N 200001 using namespace std; int n,k; vector<pair<int,int>> adj[N]; int dis[N],leaf[N]; void dfs(int u,int p){ if(adj[u].size()==1 && p!=-1){ leaf[u]=u; dis[u]=0; return; } pair<int,int> mx={-1,-1}; for(auto go:adj[u]){ int v=go.fi; int w=go.se; if(v==p)continue; dfs(v,u); dis[leaf[v]]+=w; mx=max(mx,{dis[leaf[v]],leaf[v]}); } dis[mx.se]=mx.fi; leaf[u]=mx.se; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> k; for(int i=1;i<n;i++){ int x,y,c; cin >> x >> y >> c; adj[x].push_back({y,c}); adj[y].push_back({x,c}); } for(int i=1;i<=n;i++){ dfs(i,-1); /* cout << i << " "; for(int j=1;j<=n;j++)cout << dis[j] << " "; cout << "\n"; for(int j=1;j<=n;j++)cout << leaf[j] << " "; cout << "\n"; */ vector<int> v; for(int j=1;j<=n;j++){ if(leaf[j])v.push_back(dis[j]); } sort(v.begin(),v.end()); reverse(v.begin(),v.end()); int ans=0; for(int i=0;i<k && i<(int)v.size();i++)ans+=v[i]; cout << ans << "\n"; for(int j=1;j<=n;j++){ dis[j]=0; leaf[j]=0; } } return 0; }
#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...