// اللهم صل على محمد وعلى ال محمد كما صليت على ابراهيم وعلى ال ابراهيم انك حميد مجيد
#include "bits/stdc++.h"
using namespace std;
#define ll long long
//#define int long long
#define pb push_back
#define applejuice ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
//const int mod=1e9+7;
const int mod=998244353;
const ll inf=1e17;
const int mxsz=2e5+4;
const int off=1<<20;
vector<int>adj[mxsz];
int vis[mxsz];
int a[mxsz];
int mx=0;
void dfs(int i){
vis[i]=1;
mx=max(mx,a[i]);
for (auto x:adj[i]){
if (!vis[x]){
dfs(x);
}
}
}
signed main(){
applejuice;
int n,m;
cin>>n>>m;
int root;
for (int i=1;i<=n;i++){
int p, x;
cin>>p>>x;
a[i]=x;
if (p==0)root=i;
adj[p].pb(i);
}
int sub=adj[root].size();
int abs=0;
if (sub>=m){
vis[root]=1;
int sum=0;
for (auto x:adj[root]){
mx=0;
dfs(x);
sum+=mx;
}
abs=sum;
}
vector<int>le;
for (int i=1;i<=n;i++){
if (adj[i].size()==0)le.pb(i);
}
vector<int>leaves;
for (auto x:le){
leaves.pb(a[x]);
}
sort(leaves.begin(),leaves.end());
reverse(leaves.begin(),leaves.end());
int sum=0;
for (int i=0;i<m;i++){
sum+=leaves[i];
}
abs=max(abs,sum);
cout<<abs<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |