Submission #572015
Source Code Expand
#include <bits/stdc++.h> using namespace std; #define REP(i,n) for(int i=0;i<(int)(n);++i) #define DEBUG(x) cerr << #x << " = " << x << endl #define int long long const int MAX_V = 100000; const int INF = (int)1e9; struct BIT { int N; vector<int> data; BIT(int n) : N(n), data(n + 1, 0) { } void add(int a, int w) { ++a; for(int x = a; x <= N; x += x & -x) { data[x] += w; } } int sum(int a) { int ret = 0; for(int x = a; x > 0; x -= x & -x) { ret += data[x]; } return ret; } }; struct Counter { const int N; BIT bit; Counter(int n) : N(n), bit(n) {} void insert(int x) { bit.add(x, 1); } void drop(int x) { bit.add(x, -1); } int geq(int i) { return bit.sum(N) - bit.sum(i); } }; int N; int L[MAX_V], P[MAX_V], D[MAX_V], M[MAX_V]; vector<int> child[MAX_V]; map<int, int> cmp; map<int, int> ans; void dfs(int v, Counter &counter) { for(int c : child[v]) counter.insert(cmp[M[c]]); auto it = cmp.upper_bound(D[v]); int geq = 0; if(it != cmp.end()) { geq = counter.geq(it->second); } if(!ans.count(D[v])) { ans[D[v]] = geq; } else { ans[D[v]] = min(ans[D[v]], geq); } for(int c : child[v]) { counter.drop(cmp[M[c]]); dfs(c, counter); counter.insert(cmp[M[c]]); } for(int c : child[v]) counter.drop(cmp[M[c]]); } signed main() { cin.tie(nullptr); ios::sync_with_stdio(false); cin >> N; REP(i,N) cin >> L[i]; P[0] = -1; for(int i = 1; i < N; ++i) { cin >> P[i]; P[i]--; child[P[i]].push_back(i); } D[0] = L[0]; for(int i = 1; i < N; ++i) { D[i] = D[P[i]] + L[i]; } for(int i = N - 1; i >= 0; --i) { M[i] = D[i]; for(int c : child[i]) { M[i] = max(M[i], M[c]); } } REP(i,N) cmp[M[i]] = -1; { int i = 0; for(auto &it : cmp) it.second = i++; } Counter counter(cmp.size()); dfs(0, counter); int Q; cin >> Q; REP(q,Q) { int H; cin >> H; if(!ans.count(H)) cout << -1 << endl; else cout << ans[H] << endl; } }
Submission Info
Submission Time | |
---|---|
Task | I - 風船ツリー |
User | arosh |
Language | C++11 (GCC 4.9.2) |
Score | 100 |
Code Size | 2118 Byte |
Status | AC |
Exec Time | 706 ms |
Memory | 25412 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 100 / 100 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample-01.txt, sample-02.txt |
All | sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
01-01.txt | AC | 686 ms | 14408 KB |
01-02.txt | AC | 36 ms | 3384 KB |
01-03.txt | AC | 36 ms | 3388 KB |
01-04.txt | AC | 706 ms | 14268 KB |
01-05.txt | AC | 629 ms | 13948 KB |
01-06.txt | AC | 644 ms | 14068 KB |
01-07.txt | AC | 623 ms | 13892 KB |
01-08.txt | AC | 657 ms | 14136 KB |
01-09.txt | AC | 406 ms | 14140 KB |
01-10.txt | AC | 310 ms | 7484 KB |
01-11.txt | AC | 532 ms | 8616 KB |
01-12.txt | AC | 533 ms | 8616 KB |
01-13.txt | AC | 546 ms | 25268 KB |
01-14.txt | AC | 576 ms | 25272 KB |
01-15.txt | AC | 598 ms | 25412 KB |
01-16.txt | AC | 579 ms | 18936 KB |
01-17.txt | AC | 595 ms | 19012 KB |
01-18.txt | AC | 626 ms | 22200 KB |
01-19.txt | AC | 319 ms | 8072 KB |
01-20.txt | AC | 340 ms | 8004 KB |
01-21.txt | AC | 307 ms | 7616 KB |
01-22.txt | AC | 312 ms | 7420 KB |
01-23.txt | AC | 301 ms | 7532 KB |
01-24.txt | AC | 669 ms | 13120 KB |
01-25.txt | AC | 570 ms | 11332 KB |
01-26.txt | AC | 591 ms | 10712 KB |
01-27.txt | AC | 586 ms | 9792 KB |
01-28.txt | AC | 550 ms | 9908 KB |
01-29.txt | AC | 624 ms | 15040 KB |
01-30.txt | AC | 684 ms | 14632 KB |
01-31.txt | AC | 639 ms | 14812 KB |
sample-01.txt | AC | 37 ms | 3440 KB |
sample-02.txt | AC | 34 ms | 3424 KB |