답안 #1087615

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1087615 2024-09-13T02:59:49 Z trMatherz Magic Tree (CEOI19_magictree) C++17
3 / 100
153 ms 40016 KB
#include <iostream> //cin, cout


// #include <fstream>
// std::ifstream cin ("paint.in");
// std::ofstream cout ("paint.out");





// includes
#include <cmath> 
#include <set>
#include <map>
#include <queue>
#include <string>
#include <vector>
#include <array>
#include <algorithm>
#include <numeric>
#include <iomanip>
#include <unordered_set>
#include <stack>
#include <ext/pb_ds/assoc_container.hpp>
#include <random>
#include <chrono>
#include <bitset>
#include <complex>


//usings 
using namespace std;
using namespace __gnu_pbds;


// misc
#define ll long long
#define ld long double
#define pb push_back
#define pq priority_queue
#define ub upper_bound
#define lb lower_bound
template<typename T, typename U> bool emin(T &a, const U &b){ return b < a ? a = b, true : false; }
template<typename T, typename U> bool emax(T &a, const U &b){ return b > a ? a = b, true : false; }
typedef uint64_t hash_t;

// vectors
#define vi vector<int>
#define vvi vector<vi>
#define vvvi vector<vvi>
#define vpii vector<pair<int, int>>
#define vvpii vector<vector<pair<int, int>>>
#define vppipi vector<pair<int, pair<int, int>>>
#define vl vector<ll>
#define vvl vector<vl>
#define vvvl vector<vvl>
#define vpll vector<pair<ll, ll>>
#define vvpll vector<vpll>
#define vb vector<bool>
#define vvb vector<vb>
#define vs vector<string>
#define sz(x) (int)x.size()
#define rz resize
#define all(x) x.begin(), x.end()
#define vc vector<char>
#define vvc vector<vc>


// pairs
#define pii pair<int, int>
#define pll pair<ll, ll>
#define mp make_pair
#define f first
#define s second

// sets
#define si set<int>
#define sl set<ll>
#define ss set<string>
#define in insert
template <class T> using iset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

// maps
#define mii map<int, int>
#define mll map<ll, ll>

// loops
#define FR(x, z, y) for (int x = z; x < y; x++)
#define FRE(x, z, y) FR(x, z, y + 1)
#define F(x, y) FR(x, 0, y)
#define FE(x, y) F(x, y + 1)
#define A(x, y) for(auto &x : y)

int n, m, k; 
vvi a; vpll b;  
vector<set<pll>> dp; 
void plop(int x, int p) {
    A(u, a[x]) {
        if(u == p) continue; 
        plop(u, x); 
        if(sz(dp[u]) > sz(dp[x])) swap(dp[x], dp[u]); 
        A(l, dp[u]) dp[x].in(l); 
    }
    if(b[x].s == 0) return; 
    dp[x].in(b[x]); 
    ll ct = b[x].s; 
    auto it = dp[x].ub({b[x].f + 1, -1}); 
    while(it != dp[x].end()) { 
        if(it->s > ct) { dp[x].in({it->f, it->s - ct}); dp[x].erase(it++);  return; }
        else ct -= it->s, dp[x].erase(it++); 
        it++;
    }
}
int main(){
    cin >> n >> m >> k;
    a = vvi(n); dp = vector<set<pll>>(n); b = vpll(n, {0, 0}); 
    F(i, n - 1) { int x; cin >> x; a[x - 1].pb(i + 1); }
    F(i, m) { int x, y, z; cin >> x >> y >> z; b[--x] = {y, z}; }
    plop(0, 0); 
    ll an = 0;
    A(u, dp[0]) an += u.s; 
    cout << an; 
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 64 ms 19372 KB Output is correct
2 Correct 52 ms 19796 KB Output is correct
3 Correct 153 ms 40016 KB Output is correct
4 Correct 101 ms 22732 KB Output is correct
5 Correct 119 ms 24336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 604 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 143 ms 37032 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 2652 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -