Task: | Nice triplets |
Sender: | :] |
Submission time: | 2016-09-06 18:13:54 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.07 s | details |
#2 | ACCEPTED | 0.10 s | details |
#3 | ACCEPTED | 0.82 s | details |
#4 | ACCEPTED | 1.07 s | details |
#5 | ACCEPTED | 0.10 s | details |
#6 | ACCEPTED | 0.25 s | details |
#7 | ACCEPTED | 0.45 s | details |
#8 | ACCEPTED | 0.34 s | details |
#9 | ACCEPTED | 1.14 s | details |
#10 | ACCEPTED | 0.05 s | details |
#11 | ACCEPTED | 1.54 s | details |
#12 | ACCEPTED | 1.54 s | details |
#13 | ACCEPTED | 1.55 s | details |
#14 | ACCEPTED | 1.59 s | details |
#15 | ACCEPTED | 1.60 s | details |
#16 | ACCEPTED | 2.06 s | details |
#17 | ACCEPTED | 1.82 s | details |
#18 | ACCEPTED | 1.92 s | details |
#19 | ACCEPTED | 2.00 s | details |
#20 | ACCEPTED | 2.03 s | details |
#21 | ACCEPTED | 2.07 s | details |
#22 | ACCEPTED | 1.54 s | details |
#23 | ACCEPTED | 1.54 s | details |
#24 | ACCEPTED | 1.58 s | details |
#25 | ACCEPTED | 1.61 s | details |
#26 | ACCEPTED | 1.59 s | details |
#27 | ACCEPTED | 1.58 s | details |
#28 | ACCEPTED | 1.54 s | details |
#29 | ACCEPTED | 1.54 s | details |
#30 | ACCEPTED | 1.57 s | details |
#31 | ACCEPTED | 1.56 s | details |
#32 | ACCEPTED | 1.54 s | details |
#33 | ACCEPTED | 1.63 s | details |
#34 | ACCEPTED | 1.62 s | details |
#35 | ACCEPTED | 1.54 s | details |
#36 | ACCEPTED | 1.57 s | details |
#37 | ACCEPTED | 1.56 s | details |
#38 | ACCEPTED | 1.59 s | details |
#39 | ACCEPTED | 1.63 s | details |
#40 | ACCEPTED | 1.57 s | details |
Code
#include<iostream> #include<vector> using namespace std; int64_t n; void dfs1(const vector<vector<int>> &edges, vector<vector<int64_t>> &dp1, vector<int> &p, int cur, int par) { p[cur] = par; dp1[cur][0] = 1; for (auto nxt: edges[cur]) { if (nxt == par) continue; dfs1(edges, dp1, p, nxt, cur); for (int64_t i = 1; i < n; ++i) { dp1[cur][i] += dp1[nxt][i-1]; } } } void dfs2(const vector<vector<int>> &edges, const vector<vector<int64_t>> &dp1, vector<vector<int64_t>> &dp2, int cur, int par) { if (par != -1) { dp2[cur][0] = 1; for (int64_t i = 1; i < n; ++i) { dp2[cur][i] += dp2[par][i-1]; } } for (int64_t i = 2; i < n; ++i) { int64_t total = 0; /*for (auto nxt: edges[cur]) { if (nxt == par) continue; total += dp1[nxt][i]; }*/ total = dp1[cur][i-1]; if (i < n - 1) { for (auto nxt: edges[cur]) { if (nxt == par) continue; dp2[nxt][i] += total - dp1[nxt][i-2]; } } } for (auto nxt: edges[cur]) { if (nxt == par) continue; dfs2(edges, dp1, dp2, nxt, cur); } } int main() { cin >> n; vector<vector<int>> edges(n); for (int i = 0; i < n-1; ++i) { int a, b; cin >> a >> b; a--; b--; edges[a].push_back(b); edges[b].push_back(a); } vector<vector<int64_t>> dp1(n, vector<int64_t>(n)); vector<vector<int64_t>> dp2(n, vector<int64_t>(n)); dp2[0][0] = 1; vector<int> par(n); dfs1(edges, dp1, par, 0, -1); dfs2(edges, dp1, dp2, 0, -1); /*for (int i = 0; i < n; ++i) { cout << i << ": "; for (int d = 0; d < n; ++d) { cout << dp1[i][d] << ' '; } cout << '\n'; } for (int i = 0; i < n; ++i) { cout << i << ": "; for (int d = 0; d < n; ++d) { cout << dp2[i][d] << ' '; } cout << '\n'; }*/ for (int d = 1; d < n; ++d) { if (d % 2 != 0) { cout << "0 "; continue; } int64_t triples = 0; for (int i = 0; i < n; ++i) { vector<int64_t> bar1(edges[i].size()); vector<int64_t> bar2(edges[i].size()); vector<int64_t> bar3(edges[i].size()); bar3[0] = 0; bar2[0] = 0; if (edges[i][0] == par[i]) { bar1[0] = dp2[i][d/2]; } else { bar1[0] = dp1[edges[i][0]][d/2-1]; } for (int j = 1; j < (int)edges[i].size(); ++j) { if (edges[i][j] == par[i]) { bar3[j] = bar3[j-1] + bar2[j-1]*dp2[i][d/2]; bar2[j] = bar2[j-1] + bar1[j-1]*dp2[i][d/2]; bar1[j] = bar1[j-1] + dp2[i][d/2]; } else { bar3[j] = bar3[j-1] + bar2[j-1]*dp1[edges[i][j]][d/2-1]; bar2[j] = bar2[j-1] + bar1[j-1]*dp1[edges[i][j]][d/2-1]; bar1[j] = bar1[j-1] + dp1[edges[i][j]][d/2-1]; } } triples += bar3[edges[i].size()-1]; } cout << triples << ' '; } cout << '\n'; return 0; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
694 141 214 214 505 141 339 339 180 ... |
correct output |
---|
0 1301 0 12977 0 76694 0 21315... |
user output |
---|
0 1301 0 12977 0 76694 0 21315... |
Test 2
Verdict: ACCEPTED
input |
---|
928 534 15 15 364 364 66 364 726 ... |
correct output |
---|
0 1852 0 23152 0 157299 0 4823... |
user output |
---|
0 1852 0 23152 0 157299 0 4823... |
Test 3
Verdict: ACCEPTED
input |
---|
2925 2093 1182 2093 2577 1182 2213 2213 1630 ... |
correct output |
---|
0 5201 0 61916 0 512021 0 2340... |
user output |
---|
0 5201 0 61916 0 512021 0 2340... |
Test 4
Verdict: ACCEPTED
input |
---|
3198 660 2400 660 2620 2620 3008 2400 179 ... |
correct output |
---|
0 6434 0 102245 0 1122654 0 46... |
user output |
---|
0 6434 0 102245 0 1122654 0 46... |
Test 5
Verdict: ACCEPTED
input |
---|
869 142 549 142 335 142 684 549 409 ... |
correct output |
---|
0 1604 0 11624 0 56768 0 17500... |
user output |
---|
0 1604 0 11624 0 56768 0 17500... |
Test 6
Verdict: ACCEPTED
input |
---|
1514 904 557 557 957 957 754 904 250 ... |
correct output |
---|
0 3202 0 33876 0 243297 0 9322... |
user output |
---|
0 3202 0 33876 0 243297 0 9322... |
Test 7
Verdict: ACCEPTED
input |
---|
2133 1166 813 1166 751 813 416 1166 1743 ... |
correct output |
---|
0 4720 0 75657 0 705952 0 2953... |
user output |
---|
0 4720 0 75657 0 705952 0 2953... |
Test 8
Verdict: ACCEPTED
input |
---|
1833 1368 837 837 1296 1296 481 1296 548 ... |
correct output |
---|
0 3365 0 44752 0 313240 0 1147... |
user output |
---|
0 3365 0 44752 0 313240 0 1147... |
Test 9
Verdict: ACCEPTED
input |
---|
3446 3060 2907 2907 1089 1089 3155 3060 444 ... |
correct output |
---|
0 7068 0 80352 0 602995 0 3052... |
user output |
---|
0 7068 0 80352 0 602995 0 3052... |
Test 10
Verdict: ACCEPTED
input |
---|
55 28 23 23 43 43 41 28 48 ... |
correct output |
---|
0 70 0 262 0 97 0 35 0 12 0 0 ... |
user output |
---|
0 70 0 262 0 97 0 35 0 12 0 0 ... |
Test 11
Verdict: ACCEPTED
input |
---|
4000 3717 1739 3717 2875 3717 598 2875 3860 ... |
correct output |
---|
0 8708 0 147350 0 1310042 0 60... |
user output |
---|
0 8708 0 147350 0 1310042 0 60... |
Test 12
Verdict: ACCEPTED
input |
---|
4000 2607 3595 2607 3401 3401 1971 3401 3641 ... |
correct output |
---|
0 7518 0 95122 0 775490 0 4259... |
user output |
---|
0 7518 0 95122 0 775490 0 4259... |
Test 13
Verdict: ACCEPTED
input |
---|
4000 337 3391 337 783 337 721 337 2376 ... |
correct output |
---|
0 7128 0 86950 0 781051 0 4647... |
user output |
---|
0 7128 0 86950 0 781051 0 4647... |
Test 14
Verdict: ACCEPTED
input |
---|
4000 740 1571 740 1104 1104 2145 2145 3441 ... |
correct output |
---|
0 8699 0 169586 0 2358841 0 13... |
user output |
---|
0 8699 0 169586 0 2358841 0 13... |
Test 15
Verdict: ACCEPTED
input |
---|
4000 878 154 878 2194 2194 2037 2194 893 ... |
correct output |
---|
0 7747 0 101093 0 954212 0 646... |
user output |
---|
0 7747 0 101093 0 954212 0 646... |
Test 16
Verdict: ACCEPTED
input |
---|
4000 1739 685 1739 424 1739 743 1739 2656 ... |
correct output |
---|
0 10650673999 0 0 0 0 0 0 0 0 ... |
user output |
---|
0 10650673999 0 0 0 0 0 0 0 0 ... |
Test 17
Verdict: ACCEPTED
input |
---|
4000 2508 3693 2508 2165 2508 1689 3693 1935 ... |
correct output |
---|
0 1337338368 0 184329476 0 198... |
user output |
---|
0 1337338368 0 184329476 0 198... |
Test 18
Verdict: ACCEPTED
input |
---|
4000 813 3566 813 2763 813 1541 813 1762 ... |
correct output |
---|
0 426275345 0 2043667310 0 0 0... |
user output |
---|
0 426275345 0 2043667310 0 0 0... |
Test 19
Verdict: ACCEPTED
input |
---|
4000 725 282 725 365 725 3660 282 3202 ... |
correct output |
---|
0 666208836 0 972188838 0 0 0 ... |
user output |
---|
0 666208836 0 972188838 0 0 0 ... |
Test 20
Verdict: ACCEPTED
input |
---|
4000 1579 3029 1579 891 3029 2534 891 257 ... |
correct output |
---|
0 1184481790 0 0 0 0 0 0 0 0 0... |
user output |
---|
0 1184481790 0 0 0 0 0 0 0 0 0... |
Test 21
Verdict: ACCEPTED
input |
---|
4000 1996 520 1996 1978 1996 2196 1978 2182 ... |
correct output |
---|
0 1184359951 0 2360565396 0 0 ... |
user output |
---|
0 1184359951 0 2360565396 0 0 ... |
Test 22
Verdict: ACCEPTED
input |
---|
4000 1518 2792 1518 1956 1518 1572 2792 3898 ... |
correct output |
---|
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ... |
user output |
---|
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ... |
Test 23
Verdict: ACCEPTED
input |
---|
4000 2266 1993 2266 2140 2266 2230 2266 866 ... |
correct output |
---|
0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 ... |
user output |
---|
0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 ... |
Test 24
Verdict: ACCEPTED
input |
---|
4000 3923 1832 3923 1341 3923 856 3923 1130 ... |
correct output |
---|
0 10 0 10 0 10 0 10 0 10 0 10 ... |
user output |
---|
0 10 0 10 0 10 0 10 0 10 0 10 ... |
Test 25
Verdict: ACCEPTED
input |
---|
4000 103 2255 103 24 103 2124 103 535 ... |
correct output |
---|
0 1556 0 39 0 1 0 0 0 0 0 0 0 ... |
user output |
---|
0 1556 0 39 0 1 0 0 0 0 0 0 0 ... |
Test 26
Verdict: ACCEPTED
input |
---|
4000 1271 1635 1271 3388 1271 3452 1271 3371 ... |
correct output |
---|
0 2780 0 32 0 0 0 0 0 0 0 0 0 ... |
user output |
---|
0 2780 0 32 0 0 0 0 0 0 0 0 0 ... |
Test 27
Verdict: ACCEPTED
input |
---|
4000 257 1671 257 2439 257 756 257 1393 ... |
correct output |
---|
0 1406 0 56 0 4 0 0 0 0 0 0 0 ... |
user output |
---|
0 1406 0 56 0 4 0 0 0 0 0 0 0 ... |
Test 28
Verdict: ACCEPTED
input |
---|
4000 3694 1140 3694 1224 3694 1601 3694 3050 ... |
correct output |
---|
0 1570 0 83 0 15 0 2 0 0 0 0 0... |
user output |
---|
0 1570 0 83 0 15 0 2 0 0 0 0 0... |
Test 29
Verdict: ACCEPTED
input |
---|
4000 1449 2360 1449 611 1449 2332 1449 830 ... |
correct output |
---|
0 2504 0 43 0 1 0 0 0 0 0 0 0 ... |
user output |
---|
0 2504 0 43 0 1 0 0 0 0 0 0 0 ... |
Test 30
Verdict: ACCEPTED
input |
---|
4000 2519 595 2519 1119 2519 500 2519 2127 ... |
correct output |
---|
0 2250 0 54 0 0 0 0 0 0 0 0 0 ... |
user output |
---|
0 2250 0 54 0 0 0 0 0 0 0 0 0 ... |
Test 31
Verdict: ACCEPTED
input |
---|
4000 2787 2780 2787 3471 2787 206 2787 2050 ... |
correct output |
---|
0 1565 0 90 0 1 0 0 0 0 0 0 0 ... |
user output |
---|
0 1565 0 90 0 1 0 0 0 0 0 0 0 ... |
Test 32
Verdict: ACCEPTED
input |
---|
4000 1977 2196 1977 1810 1977 128 1977 436 ... |
correct output |
---|
0 1536 0 67 0 6 0 0 0 0 0 0 0 ... |
user output |
---|
0 1536 0 67 0 6 0 0 0 0 0 0 0 ... |
Test 33
Verdict: ACCEPTED
input |
---|
4000 3377 1793 3377 2977 3377 711 3377 2184 ... |
correct output |
---|
0 2524 0 36 0 3 0 0 0 0 0 0 0 ... |
user output |
---|
0 2524 0 36 0 3 0 0 0 0 0 0 0 ... |
Test 34
Verdict: ACCEPTED
input |
---|
4000 3617 2852 3617 3552 3617 2064 3617 88 ... |
correct output |
---|
0 2492 0 37 0 0 0 0 0 0 0 0 0 ... |
user output |
---|
0 2492 0 37 0 0 0 0 0 0 0 0 0 ... |
Test 35
Verdict: ACCEPTED
input |
---|
4000 2713 1183 2713 565 2713 1432 2713 2859 ... |
correct output |
---|
0 1370 0 99 0 4 0 38 0 0 0 0 0... |
user output |
---|
0 1370 0 99 0 4 0 38 0 0 0 0 0... |
Test 36
Verdict: ACCEPTED
input |
---|
4000 3350 3568 3350 968 3350 3110 3350 149 ... |
correct output |
---|
0 2026 0 49 0 45 0 12 0 0 0 0 ... |
user output |
---|
0 2026 0 49 0 45 0 12 0 0 0 0 ... |
Test 37
Verdict: ACCEPTED
input |
---|
4000 1794 1797 1794 355 1794 728 1794 2107 ... |
correct output |
---|
0 2240 0 53 0 1 0 0 0 0 0 0 0 ... |
user output |
---|
0 2240 0 53 0 1 0 0 0 0 0 0 0 ... |
Test 38
Verdict: ACCEPTED
input |
---|
4000 1571 2107 1571 1258 1571 1808 1571 1754 ... |
correct output |
---|
0 1765 0 51 0 4 0 0 0 0 0 0 0 ... |
user output |
---|
0 1765 0 51 0 4 0 0 0 0 0 0 0 ... |
Test 39
Verdict: ACCEPTED
input |
---|
4000 2132 1514 2132 3357 2132 355 2132 3958 ... |
correct output |
---|
0 1991 0 34 0 12 0 0 0 0 0 0 0... |
user output |
---|
0 1991 0 34 0 12 0 0 0 0 0 0 0... |
Test 40
Verdict: ACCEPTED
input |
---|
4000 1621 743 1621 1182 1621 1598 1621 2693 ... |
correct output |
---|
0 2500 0 22 0 2 0 0 0 0 0 0 0 ... |
user output |
---|
0 2500 0 22 0 2 0 0 0 0 0 0 0 ... |