답안 #966447

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
966447 2024-04-19T22:09:28 Z shadow_sami Magic Tree (CEOI19_magictree) C++17
3 / 100
100 ms 50264 KB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long int ll;
typedef vector<ll> vi;
typedef vector<vector<ll>> vvi;
typedef pair<ll,ll> pi;
typedef map<ll,ll> mi;
typedef long double ld;
typedef vector<ld> vd;
typedef vector<vector<ld>> vvd;
typedef pair<ld,ld> pd;
#define ff first
#define ss second
#define srt(a) sort(a.begin(),a.end());
#define fip(k, n) for (ll i = k; i < n; i++)
#define fjp(k, n) for (ll j = k; j < n; j++)
#define fin(k, n) for (ll i = k; i >= n; i--)
#define fjn(k, n) for (ll j = k; j >= n; j--)
#define fp(k, n, m) for (ll k = n; k < m; k++)
#define fn(k, n, m) for (ll k = n; k >= m; k--)
#define ordered_set tree<pi, null_type,less< pi >, rb_tree_tag,tree_order_statistics_node_update>
#define totalOne(n) __builtin_popcount(n)
#define backZero(n) __builtin_ctzll(n)
#define frontZero(n) __builtin_clzll(n)
#define fx(k) for ( auto x : k )
#define test ll t;cin >> t;while (t--)
#define nli "\n"
 
// ==========================(debug)============================================================================================== //
 
#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _printn(x); cerr << nli;
#else
#define debug(x)
#endif
 
void _printn(ll x){ cerr<<x<<" "; }
void _printn(int x){ cerr<<x<<" "; }
void _printn(ld x){ cerr<<x<<" "; }
void _printn(double x){ cerr<<x<<" "; }
void _printn(string x){ cerr<<x<<" "; }
void _printn(char x){ cerr<<x<<" "; }
void _printn(bool x){ cerr<<x<<" "; }
template<class T,class V>void _printn(pair<T,V> vv);
template<class T> void _printn(vector<T> vv);
template<class T> void _printn(set<T> vv);
template<class T,class V> void _printn(map<T,V> vv);
template<class T> void _printn(multiset<T> vv);
template<class T,class V>void _printn(pair<T,V> vv){ cerr<<"( ";_printn(vv.ff);cerr<<",";_printn(vv.ss);cerr<<")";}
template<class T> void _printn(vector<T> vv){ cerr<<"[ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"]"; };
template<class T> void _printn(set<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T> void _printn(multiset<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T,class V> void _printn(map<T,V> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
 
// ==========================(debug)============================================================================================== //
 
ll n,m,tp,tp2,res,cnt,sum,tptp,ans;
const ll mx = 5e5+5;
const ll mod = 1e9+7;
 
// ==========================(MOD)=============================================================================================== //
 
ll mod_add(ll aa,ll bb){ return ((aa%mod)+(bb%mod))%mod; }
ll mod_minus(ll aa,ll bb){ return (((aa%mod)-(bb%mod))+10*mod)%mod; }
ll mod_mul(ll aa,ll bb){ return ((aa%mod)*(bb%mod))%mod; }
ll mod_power(ll aa,ll bb){ aa%=mod; ll empowered = 1; bb%=mod-1; while(bb > 0){ if(bb & 1) empowered = mod_mul(empowered,aa); bb = bb >> 1; aa = mod_mul(aa,aa); } return empowered; }
ll mod_divi(ll aa,ll bb){ aa=mod_mul(aa,mod_power(bb,mod-2)); return aa; }
 
// ==========================(MOD)=============================================================================================== //
 
bool f = false;
vi adj[mx];
ll d[mx];
ll w[mx];
ll sr;
set<pi> st[mx];
pi p,pt;
 
void dfs(ll u){
    fx(adj[u]){
        dfs(x);            
    }    
    fx(adj[u]){
        if(st[u].size() >= st[x].size()){
            for (auto y : st[x])
                st[u].insert(y);
        }      
        else{
            for (auto y : st[u])
                st[x].insert(y);
            st[u].swap(st[x]);
        }
        st[x].clear();
    }    
    // debug(u);
    // debug(st[u]);
    if(d[u]>0){
        res = 0;
        st[u].insert({d[u],w[u]});
        p = {d[u]+1,-1e18};
        while(1){
            if(st[u].lower_bound(p)==st[u].end())
                break;
            pt = *st[u].lower_bound(p);
            if(res+pt.ss>=w[u]){
                st[u].erase(st[u].find(pt));
                st[u].insert({pt.ff,res+pt.ss-d[u]});
                // st[u].erase(st[u].find({d[u],w[u]}));
                break;
            }
            st[u].erase(st[u].find(pt));
            res += pt.ss;
        }
    }
    // debug(st[u]);
    return;
}
 
int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    // #ifndef ONLINE_JUDGE
    //     freopen("input1.txt", "r", stdin);
    //     freopen("output1.txt", "w", stdout);
    //     freopen("error1.txt", "w", stderr);
    // #endif // ONLINE_JUDGE
 
        cin>>n>>m>>tp;
        fip(0,n+2){
        	adj[i].clear();
        	d[i] = -1;
        }
        fip(2,n+1){
        	cin>>sr;
        	adj[sr].push_back(i);
        }
        ans = 0;
        fip(0,m){
        	cin>>res>>tp2>>tptp;
        	d[res] = tp2;
        	w[res] = tptp;
        }        
        ans = 0;
        dfs(1);
        fx(st[1])
            ans += x.ss;
        cout<<ans<<nli;
        
    cerr << "Time elapsed: " << setprecision(6) << 1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 15 ms 39344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 43344 KB Output is correct
2 Correct 38 ms 50264 KB Output is correct
3 Correct 99 ms 49384 KB Output is correct
4 Correct 65 ms 47032 KB Output is correct
5 Correct 87 ms 49200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 39584 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 100 ms 46972 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 15 ms 39344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 39768 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 15 ms 39344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 15 ms 39344 KB Output isn't correct
2 Halted 0 ms 0 KB -