제출 #154097

#제출 시각아이디문제언어결과실행 시간메모리
154097arnold518Fireworks (APIO16_fireworks)C++14
100 / 100
319 ms74492 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 3e5; int N, M, C[MAXN+10]; vector<int> adj[MAXN+10]; ll ans=1e18; struct Func { ll slope, cut; priority_queue<ll> PQ; Func() : slope(0), cut(0) {} void propa(ll x) { int i, j; ll a, b; while(!PQ.empty() && slope+(int)PQ.size()>-1) { if(slope+PQ.size()==0) a=PQ.top(); if(slope+PQ.size()==1) b=PQ.top(); PQ.pop(); } PQ.push(a+x); PQ.push(b+x); cut+=x; } }; Func *dfs(int now) { int i, j; Func *ret=new Func; if(adj[now].empty()) { ret->slope=-1; ret->cut=C[now]; ret->PQ.push(C[now]); ret->PQ.push(C[now]); return ret; } for(int nxt : adj[now]) { Func *t=dfs(nxt); if(t->PQ.size()>ret->PQ.size()) swap(t, ret); ret->slope+=t->slope; ret->cut+=t->cut; while(!t->PQ.empty()) ret->PQ.push(t->PQ.top()), t->PQ.pop(); } if(now!=1) ret->propa(C[now]); return ret; } int main() { int i, j; scanf("%d%d", &N, &M); for(i=2; i<=N+M; i++) { int p; scanf("%d%d", &p, &C[i]); adj[p].push_back(i); } Func *fin=dfs(1); vector<ll> V; while(!fin->PQ.empty()) V.push_back(fin->PQ.top()), fin->PQ.pop(); V.push_back(0); reverse(V.begin(), V.end()); for(i=1; i<V.size(); i++) { ans=min(ans, fin->cut+fin->slope*(V[i]-V[i-1])); fin->cut+=fin->slope*(V[i]-V[i-1]); fin->slope++; } printf("%lld", ans); }

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

fireworks.cpp: In member function 'void Func::propa(ll)':
fireworks.cpp:23:13: warning: unused variable 'i' [-Wunused-variable]
         int i, j;
             ^
fireworks.cpp:23:16: warning: unused variable 'j' [-Wunused-variable]
         int i, j;
                ^
fireworks.cpp: In function 'Func* dfs(int)':
fireworks.cpp:38:9: warning: unused variable 'i' [-Wunused-variable]
     int i, j;
         ^
fireworks.cpp:38:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
fireworks.cpp: In function 'int main()':
fireworks.cpp:75:5: warning: this 'while' clause does not guard... [-Wmisleading-indentation]
     while(!fin->PQ.empty()) V.push_back(fin->PQ.top()), fin->PQ.pop(); V.push_back(0);
     ^~~~~
fireworks.cpp:75:72: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'while'
     while(!fin->PQ.empty()) V.push_back(fin->PQ.top()), fin->PQ.pop(); V.push_back(0);
                                                                        ^
fireworks.cpp:78:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i=1; i<V.size(); i++)
              ~^~~~~~~~~
fireworks.cpp:63:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
fireworks.cpp:65:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &N, &M);
     ~~~~~^~~~~~~~~~~~~~~~
fireworks.cpp:69:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &p, &C[i]);
         ~~~~~^~~~~~~~~~~~~~~~~~~
fireworks.cpp: In function 'Func* dfs(int)':
fireworks.cpp:31:32: warning: 'b' may be used uninitialized in this function [-Wmaybe-uninitialized]
         PQ.push(a+x); PQ.push(b+x);
                               ~^~
fireworks.cpp:24:15: note: 'b' was declared here
         ll a, b;
               ^
fireworks.cpp:31:18: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
         PQ.push(a+x); PQ.push(b+x);
                 ~^~
fireworks.cpp:24:12: note: 'a' was declared here
         ll a, b;
            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...