QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#100963 | #5830. 树 | Scintilla | 0 | 3206ms | 612924kb | C++14 | 3.3kb | 2023-04-28 20:58:37 | 2023-04-28 20:58:38 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i, s, e) for (int i = s; i <= e; ++i)
#define drep(i, s, e) for (int i = s; i >= e; --i)
#define file(a) freopen(#a".in", "r", stdin), freopen(#a".out", "w", stdout)
#define pv(a) cout << #a << " = " << a << endl
#define pa(a, l, r) cout << #a " : "; rep(_, l, r) cout << a[_] << ' '; cout << endl
const int N = 1e6 + 10;
const int M = 20;
int read() {
int x = 0, f = 1; char c = getchar();
for (; c < '0' || c > '9'; c = getchar()) if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - 48;
return x * f;
}
int n, a[N], p[N], mdep[N], mson[N], dep[N], bfn[N], bn, rev[N], pre[N][M], cnt[N], down[N], lst[N], cur[N], son[N][M], f[N][M];
vector <int> e[N];
signed main() {
n = read();
rep(i, 1, n) a[i] = read();
rep(i, 2, n) {
p[i] = read();
// cout << p[i] << ' ' << i << endl;
e[p[i]].emplace_back(i);
}
rep(i, 1, n) mdep[i] = -1;
drep(i, n, 1) {
mdep[p[i]] = max(mdep[p[i]], ++ mdep[i]);
sort(e[i].begin(), e[i].end(), [&](int u, int v) {
return mdep[u] < mdep[v];
});
if (e[i].size()) mson[i] = e[i].back();
}
auto bfs = [&](int s = 1) {
queue <int> q;
q.push(s);
while (q.size()) {
int u = q.front(); q.pop();
bfn[u] = ++ bn, rev[bfn[u]] = u;
f[u][0] = f[cur[dep[u]]][0] + a[u];
cnt[u] = cnt[cur[dep[u]]] + 1;
rep(i, 0, M - 1) {
pre[u][i] = pre[cur[dep[u]]][i] + (a[u] >> i & 1);
}
lst[u] = cur[dep[u]], cur[dep[u]] = u;
for (int v : e[u]) {
dep[v] = dep[u] + 1;
q.push(v);
}
}
} ;
bfs();
rep(u, 1, n) {
son[u][0] = u;
cnt[u] += cnt[p[u]];
rep(i, 0, M - 1) pre[u][i] += pre[p[u]][i];
}
drep(u, n, 1) {
down[u] = down[mson[u]] ? down[mson[u]] : u;
}
// pa(p, 1, n);
// pa(mson, 1, n);
// pa(lst, 1, n);
// rep(u, 1, n) cout << f[u][0] << ' ';
// cout << endl;
// rep(u, 1, n) cout << pre[u][0] << ' ';
// cout << endl;
rep(i, 1, 19) drep(u, n, 1) {
son[u][i] = son[mson[son[u][i - 1]]][i - 1];
if (!son[u][i]) continue;
f[u][i] = f[u][i - 1] + f[mson[son[u][i - 1]]][i - 1];
int c = pre[son[u][i]][i - 1] - pre[son[u][i - 1]][i - 1];
f[u][i] += (cnt[son[u][i]] - cnt[son[u][i - 1]] - 2 * c) << i - 1;
// cout << "i, u, c, f = " << i << ' ' << u << ' ' << c << ' ' << f[u][i] << endl;
// pv(son[u][i]);
}
for (int q = read(); q; -- q) {
auto ask = [&](int u, int d) {
if (!u) return 0ll;
// cout << "----- ask u, d = " << u << ' ' << d << endl;
d = min(d, dep[down[u]] - dep[u]);
++ d;
int res = 0;
drep(i, 19, 0) if (d >> i) {
// cout << "u, i, f[u][i] = " << u << ' ' << i << ' ' << f[u][i] << endl;
res += f[u][i], u = mson[son[u][i]], d ^= 1 << i;
if (!u || !i) break;
int c = pre[down[u]][i] - pre[p[u]][i];
res += (cnt[down[u]] - cnt[p[u]] - 2 * c) << i;
// cout << "u, i, c, res = " << u << ' ' << i << ' ' << c << ' ' << res << endl;
}
return res;
} ;
int u = read(), d = read();
int res = ask(u, d) - ask(lst[u], min(d, dep[down[u]] - dep[u]));
// pv(ask(u, d));
// pv(ask(lst[u], d));
printf("%lld\n", res);
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 5ms
memory: 42904kb
input:
2000 946347867 341162491 202762650 295215762 254064439 66267204 693162580 357612557 492940637 939526638 59775103 374919339 144042807 861369313 651043728 999024805 439554916 167782038 597475252 56704409 69846137 22185655 79439847 769194737 145071391 226046618 915359433 392527325 84982946 54584098 827...
output:
129783432622 558747809 12352523 864526660726 91729843754 585197158 1628586747 922104954 14754466440 158725904368 1832814618 1719999173 57622640383 2418952887 220137078239 165287502748 403506301949 1458062157 139639460586 708763390 974312741 22160481183 541384937 203104970965 755479297 465075008 5120...
result:
wrong answer 1st numbers differ - expected: '31727996563', found: '129783432622'
Test #2:
score: 0
Wrong Answer
time: 133ms
memory: 93060kb
input:
99999 792064428 473106195 799314986 65440734 948726345 442414256 280245405 873012700 466192412 899092866 283555341 657824017 963883713 793944180 767444438 105576842 542107696 580140098 65321660 381184238 584604194 397414881 861590124 309323011 217641157 120832524 303744205 961590116 110259426 380351...
output:
2509771087 102808901245 2506594727 125427731 1983703727 2464509420882 5038222989612 586671581 7983719160268 798898621 468901916 1620113106 25990778 1594379152 8996848343481 30663600865849 1721547793 1491500623 4110192112242 15307885043062 263989546 3068371037 2959123888913 727716410 2234098350791 84...
result:
wrong answer 1st numbers differ - expected: '2509771019', found: '2509771087'
Test #3:
score: 0
Wrong Answer
time: 3206ms
memory: 612924kb
input:
1000000 947727010 179844140 923847675 171881267 5552129 974443359 989307850 869400987 126992154 527448411 141137718 136124474 917813105 392020809 79012342 473860575 969007624 833563354 90169336 878445705 84352622 403307122 733751738 670851448 942399068 731541999 101293644 545785337 964751520 9168003...
output:
322288206991293 64144946606827 131622021461016 185914374898941 4835863616293 52498384514864 91107317145932 133549305860818 287851061406534 123171127466010 128592990936968 8701280183879 14021808260941 65044029324993 310510965687315 15605868051249 75072334423958 73630325382068 66821080528726 217424723...
result:
wrong answer 1st numbers differ - expected: '322288180595345', found: '322288206991293'
Test #4:
score: 0
Wrong Answer
time: 3185ms
memory: 612892kb
input:
1000000 264862971 751386013 921867736 711577153 262726588 565608444 975324815 440219681 107888226 928241413 729126923 283912914 86248857 896446999 12839598 651796991 139813366 105131395 341646170 839485925 939265720 844548518 102280410 457829889 8602879 737140565 17206920 974175632 535833885 8373832...
output:
1437301279725 97809355735725 338628474888691 233680202642682 7398782854524 271306310490771 20877499166572 90775318291091 2535173933607 66604551363756 211534435306219 84757466685450 17886217839546 132051691526119 1860377260424 46253769112453 83950948773188 257274546429611 240943174832345 118446636358...
result:
wrong answer 1st numbers differ - expected: '1437301063221', found: '1437301279725'
Test #5:
score: 0
Wrong Answer
time: 1634ms
memory: 597056kb
input:
1000000 978606419 773027389 111265179 979476504 280718851 476857501 751854950 579263969 848569548 781051974 31782627 533831186 812822170 111553645 297770650 331144396 676977983 2236128 258203325 75591120 676466973 60056446 494411414 286185093 92474576 173276071 535648669 87210101 355790411 880267291...
output:
2258826661 938786622 1803221827 34198899746 24126698248 2783437679 16665956280 2720451454 1859551445 476794111 986063591 1579646962 37468752325 38176990 781099093 527479272 5103297773 2519422378 1620138209 45199860730 12472307715 9617013599 2053842542 36282496738 49589751 499629803 9513817015 137931...
result:
wrong answer 4th numbers differ - expected: '20412967786', found: '34198899746'
Test #6:
score: 0
Wrong Answer
time: 1926ms
memory: 597284kb
input:
1000000 952470566 585754087 120174600 401525004 458588768 5487567 31210348 446333263 231409083 521960132 457721893 866842852 925207283 16805978 4706826 99640835 619272676 136536623 459247161 308807462 633687300 717271369 23906473 865522890 173799280 424309108 719410673 118906385 110627845 730629403 ...
output:
994051214 904057442 5097782338 12115414423888 44589763178351 976251946 1386223378 43760580 2742454462 3077329408 127974808928957 716198149 190685967 105215742257612 13827392197052 557364187 1084840311 3104092 276690929 170820739149281 467852673 33049531 425554649 68480583985216 97736610924937 426018...
result:
wrong answer 3rd numbers differ - expected: '2995278795', found: '5097782338'
Test #7:
score: 0
Wrong Answer
time: 1832ms
memory: 597540kb
input:
1000000 732367509 105027907 958920212 886798715 102486738 813075884 301085392 242303497 979657287 944859684 307768 438158233 561755409 740706505 791145209 283862713 828081846 771569552 59044985 600549571 191330226 438693570 36976319 810654215 220068818 771875421 740642902 839964155 206129566 2065543...
output:
999908753 401770479 330074031151912 194002588398182 60975666388213 143172450958334 1146711843 187367763141946 2910590132 4981802777 1079679207 2140524944 75514756 9410084351477 76260056882688 167205592 58363655788956 1085743192 51861395060073 416905260757083 125800058499512 990736484 9627606106 3730...
result:
wrong answer 3rd numbers differ - expected: '206278425790162', found: '330074031151912'
Test #8:
score: 0
Wrong Answer
time: 2051ms
memory: 597528kb
input:
1000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
12239616234 6635151041 29141891 84 10760023681 67400479 0 1959862675 843434 3 3 -449331 1 1 7 0 6199548785 -720999 0 5087969817 8 0 0 29 0 1414297441 1 0 0 0 0 3289771810 1297272060 0 71092536 4589115550 -1148078 247963290 157993479 3 1 134326042 1449237711 5 38234691249 0 12682587350 2 1 -134732 30...
result:
wrong answer 1st numbers differ - expected: '3826404725', found: '12239616234'
Test #9:
score: 0
Wrong Answer
time: 2079ms
memory: 597688kb
input:
1000000 465660691 982007525 816592310 377030959 572981469 679249520 86377999 709561525 940473306 35102782 886143915 792819787 903287397 264564177 857982095 91486434 217197704 123118964 383387342 820268798 497623987 255010796 607884194 848568529 38169627 197987657 421323589 664004905 485409127 696844...
output:
96094116143 8243989815201 165758475313682 34208175016011 275400654 1384234652 64716568 11773603439838 10114554702002 263845840014 31172683330970 528398853 1456723425 1800621907 16591607574909 23475037 56966952058172 245789356 109738951 48543617865287 121514098006912 102619945 35215443938562 15560763...
result:
wrong answer 1st numbers differ - expected: '96094116015', found: '96094116143'
Test #10:
score: 0
Wrong Answer
time: 2235ms
memory: 597860kb
input:
1000000 665830082 788228483 245541444 289601309 641764988 150723484 925214020 557415731 310210969 379707835 517820381 883917428 134445288 775557009 444476671 89856268 655841087 888410254 37788122 694551869 563331754 488108584 839551943 415095075 445425438 35452604 562044723 640544531 146258096 66852...
output:
431856043 520373616 139759803242386 7077778829949 101600823402800 13801713352732 762015332 4985153003381 2504048880 594507509 2675566980745 25669162153706 306250439 62500137 90931475684923 786078000 35680002013720 4162772068 4984311682702 877965179 18605465356548 1013123764 8946677454796 56835739948...
result:
wrong answer 3rd numbers differ - expected: '77562434895287', found: '139759803242386'