제출 #240678

#제출 시각아이디문제언어결과실행 시간메모리
240678karmaMagic Tree (CEOI19_magictree)C++14
100 / 100
165 ms36984 KiB
#include <bits/stdc++.h>
#define pb          emplace_back
#define ll          long long
#define fi          first
#define se          second
#define mp          make_pair
//#define int         int64_t

using namespace std;

const int N = int(1e5) + 10;
typedef pair<int, int> pii;

int n, m, k, p;
vector<int> adj[N];
pii fr[N];
map<int, ll> f[N];

void dfs(int u) {
    for(int v: adj[u]) {
        dfs(v);
        if(f[u].size() < f[v].size()) f[u].swap(f[v]);
        for(auto& ff: f[v]) f[u][ff.fi] += ff.se;
    }
    if(fr[u].fi) {
        ll tmp = 0;
        while(1) {
            auto it = f[u].upper_bound(fr[u].fi);
            if(it == f[u].end()) break;
            if(it->se + tmp > fr[u].se) {
                it->se += (tmp - fr[u].se);
                break;
            }
            tmp += it->se;
            f[u].erase(it);
        }
        f[u][fr[u].fi] += fr[u].se;
    }
    //cout << u << '\n';
    //for(auto ff: f[u]) cout << ff.fi << ' ' << ff.se << '\n';
}

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    #define Task        "test"
    if(fopen(Task".inp", "r")) {
        freopen(Task".inp", "r", stdin);
        freopen(Task".out", "w", stdout);
    }
    cin >> n >> m >> k;
    for(int i = 2; i <= n; ++i) {
        cin >> p;
        adj[p].pb(i);
    }
    for(int v, d, w, i = 1; i <= m; ++i) {
        cin >> v >> d >> w;
        fr[v] = mp(d, w);
    }
    dfs(1);
    ll res = 0;
    for(auto ff: f[1]) res += ff.se;
    cout << res;
}

컴파일 시 표준 에러 (stderr) 메시지

magictree.cpp: In function 'int32_t main()':
magictree.cpp:48:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(Task".inp", "r", stdin);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
magictree.cpp:49:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(Task".out", "w", stdout);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...