QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#710171 | #9533. Classical Counting Problem | zlt | 45 | 939ms | 51512kb | C++14 | 6.0kb | 2024-11-04 18:57:39 | 2024-11-04 18:57:39 |
Judging History
answer
#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define uint unsigned
#define mems(a, x) memset((a), (x), sizeof(a))
using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;
const int maxn = 100100;
int n, fa[maxn];
uint ans;
vector<int> G1[maxn], G2[maxn], G3[maxn];
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
int sz[maxn], son[maxn], dep[maxn], top[maxn];
int dfn[maxn], st[maxn], tim, ed[maxn], rnk[maxn];
int dfs(int u, int f, int d) {
fa[u] = f;
sz[u] = 1;
dep[u] = d;
int mx = -1;
for (int v : G2[u]) {
sz[u] += dfs(v, u, d + 1);
if (sz[v] > mx) {
son[u] = v;
mx = sz[v];
}
}
return sz[u];
}
void dfs2(int u, int tp) {
top[u] = tp;
dfn[u] = ++tim;
if (!son[u]) {
return;
}
dfs2(son[u], tp);
for (int v : G2[u]) {
if (!dfn[v]) {
dfs2(v, v);
}
}
}
inline int qlca(int x, int y) {
while (top[x] != top[y]) {
if (dep[top[x]] < dep[top[y]]) {
swap(x, y);
}
x = fa[top[x]];
}
if (dep[x] > dep[y]) {
swap(x, y);
}
return x;
}
int so[maxn];
int dfs(int u) {
st[u] = ++tim;
rnk[tim] = u;
int s = 1, mx = -1;
for (int v : G1[u]) {
int t = dfs(v);
s += t;
if (t > mx) {
mx = t;
so[u] = v;
}
}
ed[u] = tim;
return s;
}
struct node {
uint sa, sb, sab;
};
inline node operator + (const node &a, const node &b) {
node res;
res.sa = a.sa + b.sa;
res.sb = a.sb + b.sb;
res.sab = a.sab + b.sab;
return res;
}
namespace SGT {
node a[maxn << 2];
uint tag[maxn << 2];
inline void pushup(int x) {
a[x] = a[x << 1] + a[x << 1 | 1];
}
inline void pushtag(int x, int l, int r, uint y) {
a[x].sa += y * (r - l + 1);
a[x].sab += y * a[x].sb;
tag[x] += y;
}
inline void pushdown(int x, int l, int r) {
int mid = (l + r) >> 1;
if (tag[x]) {
pushtag(x << 1, l, mid, tag[x]);
pushtag(x << 1 | 1, mid + 1, r, tag[x]);
tag[x] = 0;
}
}
void build(int rt, int l, int r) {
tag[rt] = a[rt].sa = a[rt].sb = a[rt].sab = 0;
if (l == r) {
return;
}
int mid = (l + r) >> 1;
build(rt << 1, l, mid);
build(rt << 1 | 1, mid + 1, r);
}
void update(int rt, int l, int r, int ql, int qr, uint x) {
if (ql <= l && r <= qr) {
pushtag(rt, l, r, x);
return;
}
pushdown(rt, l, r);
int mid = (l + r) >> 1;
if (ql <= mid) {
update(rt << 1, l, mid, ql, qr, x);
}
if (qr > mid) {
update(rt << 1 | 1, mid + 1, r, ql, qr, x);
}
pushup(rt);
}
void modify(int rt, int l, int r, int x, uint y) {
if (l == r) {
a[rt].sb = y;
a[rt].sab = a[rt].sa * y;
return;
}
pushdown(rt, l, r);
int mid = (l + r) >> 1;
(x <= mid) ? modify(rt << 1, l, mid, x, y) : modify(rt << 1 | 1, mid + 1, r, x, y);
pushup(rt);
}
uint query(int rt, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) {
return a[rt].sab;
}
pushdown(rt, l, r);
int mid = (l + r) >> 1;
uint res = 0;
if (ql <= mid) {
res += query(rt << 1, l, mid, ql, qr);
}
if (qr > mid) {
res += query(rt << 1 | 1, mid + 1, r, ql, qr);
}
return res;
}
}
inline void upd(int x, uint y) {
// printf("upd %d %u\n", x, y);
while (x) {
// printf("upd %d %d\n", dfn[top[x]], dfn[x]);
SGT::update(1, 1, n, dfn[top[x]], dfn[x], y);
x = fa[top[x]];
}
}
inline uint qry(int x) {
uint res = 0;
while (x) {
res += SGT::query(1, 1, n, dfn[top[x]], dfn[x]);
x = fa[top[x]];
}
return res;
}
set<pii> S;
int stk[maxn], tp;
bool vis[maxn];
inline void add(int x) {
// printf("add %d\n", x);
if (!vis[x]) {
vis[x] = 1;
stk[++tp] = x;
SGT::modify(1, 1, n, dfn[x], x);
}
}
inline void clear() {
// puts("clear");
for (int i = 1; i <= tp; ++i) {
int x = stk[i];
vis[x] = 0;
SGT::modify(1, 1, n, dfn[x], 0);
}
tp = 0;
}
void dfs3(int u) {
if (!so[u]) {
ans += 1U * u * u;
S.emplace(dfn[u], u);
add(u);
upd(u, 1);
return;
}
for (int v : G1[u]) {
if (v == so[u]) {
continue;
}
dfs3(v);
S.clear();
clear();
for (int i = st[v]; i <= ed[v]; ++i) {
int w = rnk[i];
upd(w, -1);
}
}
dfs3(so[u]);
for (int v : G1[u]) {
if (v == so[u]) {
continue;
}
for (int i = st[v]; i <= ed[v]; ++i) {
int w = rnk[i];
S.emplace(dfn[w], w);
auto it = S.find(mkp(dfn[w], w));
if (it != S.begin()) {
auto jt = prev(it);
int x = qlca(jt->scd, w);
add(x);
}
if (next(it) != S.end()) {
auto jt = next(it);
int x = qlca(jt->scd, w);
add(x);
}
upd(w, 1);
add(w);
}
}
S.emplace(dfn[u], u);
auto it = S.find(mkp(dfn[u], u));
if (it != S.begin()) {
auto jt = prev(it);
int x = qlca(jt->scd, u);
add(x);
}
if (next(it) != S.end()) {
auto jt = next(it);
int x = qlca(jt->scd, u);
add(x);
}
upd(u, 1);
add(u);
ans += qry(u) * u;
// printf("u: %d %u\n", u, qry(u));
}
void solve() {
scanf("%d", &n);
tim = 0;
for (int i = 1; i <= n; ++i) {
vector<int>().swap(G1[i]);
vector<int>().swap(G2[i]);
vector<int>().swap(G3[i]);
fa[i] = i;
son[i] = dep[i] = top[i] = dfn[i] = so[i] = 0;
}
for (int i = 1, u, v; i < n; ++i) {
scanf("%d%d", &u, &v);
G3[u].pb(v);
G3[v].pb(u);
}
for (int i = 1; i <= n; ++i) {
fa[i] = i;
}
for (int i = n; i; --i) {
for (int j : G3[i]) {
if (i > j) {
continue;
}
j = find(j);
G1[i].pb(j);
fa[j] = i;
}
}
for (int i = 1; i <= n; ++i) {
fa[i] = i;
}
for (int i = 1; i <= n; ++i) {
for (int j : G3[i]) {
if (i < j) {
continue;
}
j = find(j);
G2[i].pb(j);
fa[j] = i;
}
}
dfs(n, 0, 1);
dfs2(n, n);
tim = 0;
ans = 0;
dfs(1);
SGT::build(1, 1, n);
dfs3(1);
clear();
printf("%u\n", ans);
}
int main() {
int T = 1;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}
详细
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 45ms
memory: 17672kb
input:
10000 10 10 2 5 2 7 2 1 7 4 10 6 2 3 7 9 7 8 5 10 6 5 1 6 9 5 4 6 3 1 7 5 2 4 8 4 10 5 10 7 6 1 6 4 1 3 4 5 1 9 1 8 7 10 6 2 8 10 8 7 5 7 9 7 3 5 4 3 2 4 6 8 1 7 10 4 10 10 3 2 3 9 2 1 2 4 2 6 4 5 4 7 4 8 4 10 6 1 3 6 7 6 5 6 9 7 2 5 4 1 10 9 8 6 10 3 5 6 5 1 6 10 3 4 1 7 1 8 1 9 3 2 10 10 9 10 3 9 ...
output:
1592 2672 1532 3216 1869 3983 1215 2628 1548 4137 957 2441 1921 2974 1666 1701 2261 2610 1760 2259 2323 3480 2319 1375 1648 4365 2377 1544 1912 1114 1697 2814 2208 2397 1360 1842 1747 2365 1436 2062 2415 2316 2475 1480 1650 1998 981 1378 1785 1984 3003 989 3453 1656 2047 2302 3492 2682 2393 3162 176...
result:
wrong answer 3rd lines differ - expected: '1502', found: '1532'
Subtask #2:
score: 0
Wrong Answer
Test #2:
score: 0
Wrong Answer
time: 66ms
memory: 16776kb
input:
5000 20 20 19 7 20 16 19 2 7 15 16 13 2 11 7 6 2 14 2 12 15 5 14 17 2 4 20 3 6 18 20 10 5 1 16 9 14 8 15 20 7 17 15 7 10 17 13 7 18 10 9 17 6 18 16 18 14 16 1 10 19 17 3 18 2 13 8 19 5 1 11 14 20 8 4 18 12 11 20 20 1 17 1 18 20 3 1 9 18 16 18 10 18 12 18 6 9 5 16 19 18 4 5 11 17 14 18 15 17 7 6 13 7...
output:
20721 38034 34933 22829 18742 27544 46050 45137 16644 27383 28662 25035 26312 21148 14106 28176 17802 35960 12683 53453 11745 31418 12177 38063 13437 15559 40896 36164 24851 27669 33448 35621 21295 18051 15620 16388 23902 23641 22600 18168 15109 26323 22828 53786 27229 17201 29605 13181 18756 16472 ...
result:
wrong answer 3rd lines differ - expected: '34273', found: '34933'
Subtask #3:
score: 0
Wrong Answer
Test #4:
score: 0
Wrong Answer
time: 77ms
memory: 17308kb
input:
2500 40 29 30 24 29 36 29 7 24 18 36 4 18 21 24 17 21 1 17 14 30 19 24 34 19 12 34 11 30 23 30 16 34 38 14 35 24 27 29 20 34 3 17 22 17 31 21 26 14 5 14 2 20 15 16 39 4 37 38 10 3 25 22 33 29 32 10 13 35 9 18 8 2 6 23 40 34 28 7 40 32 10 33 32 2 32 7 10 22 7 21 10 31 22 40 32 37 32 25 22 16 22 39 10...
output:
810633 404452 117099 244667 297602 478114 651618 172328 312739 117742 245806 365391 470337 224808 611246 135238 282936 391899 241985 241809 365040 159975 156055 361771 436190 375054 365203 134808 386275 137564 271932 537918 241082 212081 413552 462152 434421 460584 236968 256887 457800 439758 244646...
result:
wrong answer 4th lines differ - expected: '243743', found: '244667'
Subtask #4:
score: 0
Wrong Answer
Test #8:
score: 0
Wrong Answer
time: 114ms
memory: 18296kb
input:
500 200 63 7 145 63 78 145 103 63 163 7 97 163 57 7 186 78 30 145 25 57 56 97 112 25 50 7 162 50 105 112 126 57 32 126 95 105 188 105 124 112 86 186 82 162 143 162 194 95 183 97 101 82 197 82 200 186 96 143 146 124 164 197 54 95 195 57 131 143 130 146 193 112 36 97 16 163 62 193 93 124 121 96 1 96 1...
output:
126443395 98757645 53031961 291855662 249009043 162378675 132960917 162112966 329089909 108127350 299902243 119131433 121002899 298936590 233906403 125125915 164591715 335168622 158873561 154337469 199805167 124185401 154231483 148544527 328821194 199730727 214630351 117839595 69955641 188282143 108...
result:
wrong answer 8th lines differ - expected: '162056007', found: '162112966'
Subtask #5:
score: 0
Wrong Answer
Test #13:
score: 0
Wrong Answer
time: 176ms
memory: 18056kb
input:
33 3000 1322 1797 2442 1797 626 2442 1979 2442 485 1979 1428 1979 2196 1979 1499 1797 1936 2442 2921 1979 751 1499 2182 2921 979 1499 935 1979 1136 485 1880 1797 1084 2921 349 751 482 349 1009 979 1003 349 2056 482 2959 1136 1288 751 496 2442 1693 935 2045 1499 868 1009 1264 1428 2891 868 1045 1288 ...
output:
3914500827 327554069 398095494 979652421 2503794359 265638384 2347160652 2180738658 3655145076 2759379894 589039971 2566150756 1715902488 1847495962 4188258866 2741527567 1844914859 3081320723 1708279848 3607543506 4065758426 3996971978 1966848624 1867947137 3320884977 2194528204 250712350 356222935...
result:
wrong answer 3rd lines differ - expected: '391027586', found: '398095494'
Subtask #6:
score: 20
Accepted
Test #18:
score: 20
Accepted
time: 347ms
memory: 40728kb
input:
1 98303 65520 65521 65521 65519 65519 65522 65522 65517 65517 65518 65518 65516 65516 65523 65523 65513 65513 65514 65514 65512 65512 65515 65515 65510 65510 65511 65511 65509 65509 65524 65524 65505 65505 65506 65506 65504 65504 65507 65507 65502 65502 65503 65503 65501 65501 65508 65508 65498 6549...
output:
2387240282
result:
ok single line: '2387240282'
Test #19:
score: 20
Accepted
time: 917ms
memory: 35152kb
input:
1 100000 72651 74015 74015 53999 53999 82883 82883 49285 49285 18491 18491 57017 57017 14822 14822 80585 80585 2393 2393 95415 95415 53193 53193 85537 85537 6136 6136 67847 67847 74149 74149 87362 87362 56875 56875 36575 36575 63221 63221 24881 24881 70084 70084 18858 18858 10916 10916 12540 12540 9...
output:
2050334631
result:
ok single line: '2050334631'
Test #20:
score: 20
Accepted
time: 921ms
memory: 35156kb
input:
1 100000 34724 22839 22839 36196 36196 48281 48281 76153 76153 47939 47939 63440 63440 70687 70687 44040 44040 65361 65361 62112 62112 11797 11797 89597 89597 36911 36911 5069 5069 48575 48575 20966 20966 95642 95642 52437 52437 88678 88678 77335 77335 53313 53313 35231 35231 85082 85082 74199 74199...
output:
746654424
result:
ok single line: '746654424'
Test #21:
score: 20
Accepted
time: 939ms
memory: 35080kb
input:
1 100000 43937 87425 87425 14024 14024 30838 30838 24475 24475 76153 76153 26430 26430 6738 6738 42792 42792 61639 61639 96671 96671 81535 81535 40471 40471 55118 55118 20311 20311 79890 79890 12082 12082 84049 84049 21637 21637 58586 58586 34151 34151 45233 45233 22789 22789 91250 91250 54125 54125...
output:
2623773461
result:
ok single line: '2623773461'
Subtask #7:
score: 25
Accepted
Test #22:
score: 25
Accepted
time: 328ms
memory: 36928kb
input:
1 100000 16150 88283 9425 88283 87988 88283 52935 88283 69816 88283 51311 88283 6910 9425 59991 87988 54743 6910 19614 52935 22926 69816 91163 88283 17233 19614 64177 19614 92097 91163 57414 9425 96321 6910 17859 54743 59810 69816 66565 17859 9948 96321 84506 59810 3928 64177 63031 54743 6214 87988 ...
output:
1787575884
result:
ok single line: '1787575884'
Test #23:
score: 25
Accepted
time: 326ms
memory: 37584kb
input:
1 100000 62262 63575 73160 63575 96365 62262 47519 96365 21455 96365 59846 62262 58337 96365 35161 58337 86407 62262 75478 73160 85060 58337 87416 63575 93832 21455 79046 59846 10212 63575 13214 96365 19580 87416 20323 85060 16635 63575 9463 75478 48664 19580 89760 10212 44672 87416 81712 62262 4685...
output:
3201252214
result:
ok single line: '3201252214'
Test #24:
score: 25
Accepted
time: 366ms
memory: 36576kb
input:
1 100000 45919 20230 54450 20230 41113 45919 2407 41113 46209 2407 60230 20230 69678 2407 56794 46209 46860 2407 21259 46860 76025 20230 22875 46209 35360 56794 23919 54450 38616 46209 32589 45919 41382 41113 92866 35360 25194 92866 31051 56794 77445 38616 72712 31051 70220 46860 62936 22875 49049 4...
output:
1408792727
result:
ok single line: '1408792727'
Test #25:
score: 25
Accepted
time: 331ms
memory: 37376kb
input:
1 100000 12337 64284 29089 12337 62292 64284 97288 64284 40021 62292 17782 62292 44533 29089 11114 29089 39182 40021 32105 44533 96395 39182 22375 29089 42005 96395 68061 44533 72549 40021 69336 64284 38466 69336 57201 11114 19998 62292 83177 69336 93468 39182 58369 62292 67850 39182 50910 22375 673...
output:
3351808169
result:
ok single line: '3351808169'
Test #26:
score: 25
Accepted
time: 328ms
memory: 37384kb
input:
1 100000 22466 68227 45347 68227 67554 68227 55553 22466 82416 67554 807 55553 39312 68227 68629 45347 82918 22466 90176 68227 81747 90176 70957 55553 19671 70957 33403 807 52966 67554 82101 33403 48470 22466 40948 45347 53089 90176 1792 82416 93729 68629 50761 68629 17137 52966 27111 52966 61380 53...
output:
2982675783
result:
ok single line: '2982675783'
Test #27:
score: 25
Accepted
time: 149ms
memory: 51512kb
input:
1 100000 4 5 5 7 7 9 9 10 10 12 12 16 16 18 18 20 20 21 21 22 22 24 24 26 26 28 28 32 32 34 34 37 37 38 38 40 40 42 42 44 44 45 45 47 47 49 49 57 57 58 58 61 61 68 68 69 69 71 71 73 73 74 74 76 76 78 78 79 79 80 80 81 81 83 83 85 85 88 88 90 90 91 91 94 94 98 98 99 99 100 100 101 101 103 103 104 104...
output:
1173931940
result:
ok single line: '1173931940'
Test #28:
score: 25
Accepted
time: 193ms
memory: 50004kb
input:
1 100000 2 4 4 6 6 10 10 11 11 13 13 14 14 16 16 18 18 19 19 25 25 29 29 30 30 31 31 32 32 33 33 34 34 36 36 39 39 41 41 44 44 46 46 47 47 48 48 49 49 50 50 51 51 53 53 59 59 61 61 62 62 63 63 64 64 66 66 67 67 72 72 73 73 74 74 76 76 81 81 82 82 83 83 84 84 87 87 90 90 91 91 93 93 94 94 95 95 98 98...
output:
3364223310
result:
ok single line: '3364223310'
Test #29:
score: 25
Accepted
time: 228ms
memory: 43828kb
input:
1 100000 1 3 3 8 8 10 10 13 13 15 15 19 19 20 20 22 22 23 23 26 26 27 27 28 28 30 30 31 31 32 32 36 36 39 39 40 40 41 41 44 44 47 47 54 54 55 55 56 56 58 58 61 61 62 62 63 63 72 72 74 74 76 76 77 77 79 79 81 81 82 82 85 85 87 87 92 92 93 93 95 95 96 96 97 97 102 102 104 104 105 105 107 107 111 111 1...
output:
714456019
result:
ok single line: '714456019'
Test #30:
score: 25
Accepted
time: 243ms
memory: 43716kb
input:
1 100000 3 6 6 7 7 8 8 10 10 11 11 14 14 18 18 21 21 25 25 27 27 28 28 29 29 31 31 33 33 35 35 36 36 37 37 39 39 40 40 41 41 44 44 45 45 46 46 47 47 49 49 50 50 56 56 61 61 64 64 67 67 69 69 71 71 73 73 74 74 79 79 80 80 84 84 85 85 86 86 87 87 91 91 92 92 93 93 94 94 95 95 97 97 98 98 100 100 101 1...
output:
4042991246
result:
ok single line: '4042991246'
Test #31:
score: 25
Accepted
time: 289ms
memory: 39508kb
input:
1 100000 5 6 6 7 7 10 10 12 12 13 13 14 14 16 16 18 18 19 19 20 20 22 22 23 23 31 31 32 32 37 37 39 39 40 40 41 41 45 45 46 46 49 49 50 50 52 52 54 54 56 56 58 58 59 59 62 62 63 63 65 65 67 67 68 68 70 70 76 76 77 77 80 80 82 82 83 83 85 85 87 87 96 96 102 102 105 105 107 107 108 108 109 109 110 110...
output:
3900075091
result:
ok single line: '3900075091'
Test #32:
score: 25
Accepted
time: 349ms
memory: 38808kb
input:
1 100000 4 5 5 6 6 9 9 12 12 13 13 17 17 18 18 20 20 21 21 22 22 24 24 26 26 28 28 30 30 35 35 37 37 38 38 46 46 47 47 48 48 49 49 50 50 55 55 57 57 58 58 62 62 65 65 67 67 68 68 69 69 70 70 76 76 78 78 79 79 80 80 81 81 83 83 84 84 85 85 86 86 87 87 90 90 91 91 93 93 94 94 96 96 99 99 100 100 106 1...
output:
3418237095
result:
ok single line: '3418237095'
Test #33:
score: 25
Accepted
time: 430ms
memory: 37400kb
input:
1 100000 1 2 2 3 3 4 4 6 6 14 14 16 16 18 18 20 20 21 21 23 23 24 24 25 25 31 31 33 33 34 34 36 36 38 38 42 42 43 43 44 44 46 46 47 47 48 48 50 50 51 51 53 53 54 54 55 55 56 56 61 61 62 62 63 63 64 64 66 66 67 67 72 72 74 74 76 76 80 80 81 81 85 85 86 86 87 87 90 90 92 92 95 95 98 98 99 99 102 102 1...
output:
3560442703
result:
ok single line: '3560442703'
Test #34:
score: 25
Accepted
time: 621ms
memory: 36072kb
input:
1 100000 1 4 4 5 5 9 9 10 10 11 11 12 12 16 16 17 17 21 21 27 27 29 29 33 33 34 34 36 36 37 37 40 40 42 42 46 46 47 47 48 48 52 52 54 54 55 55 59 59 61 61 62 62 66 66 67 67 68 68 70 70 72 72 74 74 75 75 76 76 77 77 78 78 79 79 83 83 85 85 87 87 93 93 96 96 83238 83238 99 99 100 100 101 101 103 103 1...
output:
4078156478
result:
ok single line: '4078156478'
Test #35:
score: 25
Accepted
time: 928ms
memory: 34984kb
input:
1 100000 69124 13938 13938 89981 89981 18806 18806 39741 39741 5738 5738 25296 25296 11914 11914 79193 79193 64999 64999 86981 86981 210 210 4953 4953 96054 96054 66076 66076 1974 1974 27290 27290 17367 17367 54724 54724 64515 64515 72049 72049 55651 55651 48 48 58482 58482 96784 96784 22698 22698 3...
output:
574415279
result:
ok single line: '574415279'