제출 #1206727

#제출 시각아이디문제언어결과실행 시간메모리
1206727em4ma2바이오칩 (IZhO12_biochips)C++20
30 / 100
51 ms9468 KiB
//                                 اللهم صل على محمد وعلى ال محمد كما صليت على ابراهيم وعلى ال ابراهيم انك حميد مجيد
#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 timeMemoryGrader output
Fetching results...