Submission #1214373

#TimeUsernameProblemLanguageResultExecution timeMemory
1214373guagua0407Worst Reporter 4 (JOI21_worst_reporter4)C++20
0 / 100
10 ms16788 KiB
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

void setIO(string s) {
    freopen((s + ".in").c_str(), "r", stdin);
    freopen((s + ".out").c_str(), "w", stdout);
}

const int mxn=2e5+5;
vector<int> adj[mxn];
map<int,int> mp[mxn];
vector<int> h(mxn),c(mxn);

void dfs(int v){
    for(auto u:adj[v]){
        dfs(u);
        if(mp[u].size()>mp[v].size()) swap(mp[v],mp[u]);
        for(auto x:mp[u]){
            mp[v][x.f]+=x.s;
        }
    }
    ll sum=c[v];
    while(sum>0){
        auto it=mp[v].lower_bound(h[v]);
        if(mp[v].empty() or it==mp[v].begin()) break;
        it--;
        if(sum-(*it).s<0){
            mp[v][(*it).f]-=sum;
            break;
        }
        else{
            sum-=(*it).s;
            mp[v].erase(it);
        }
    }
    mp[v][h[v]]+=c[v];
    /*cout<<v<<'\n';
    for(auto x:mp[v]){
        cout<<x.f<<' '<<x.s<<'\n';
    }*/
}

int main(){_
    int n;
    cin>>n;
    ll sum=0;
    for(int i=1;i<=n;i++){
        int p;
        cin>>p;
        if(p<i) adj[p].push_back(i);
        cin>>h[i]>>c[i];
        sum+=c[i];
    }
    dfs(1);
    for(auto v:mp[1]){
        sum-=v.s;
    }
    cout<<sum<<'\n';
    return 0;
}
//maybe its multiset not set
//yeeorz
//diaoborz

Compilation message (stderr)

worst_reporter2.cpp: In function 'void setIO(std::string)':
worst_reporter2.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
worst_reporter2.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     freopen((s + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...