QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#710171#9533. Classical Counting Problemzlt45 939ms51512kbC++146.0kb2024-11-04 18:57:392024-11-04 18:57:39

Judging History

你现在查看的是最新测评结果

  • [2024-11-04 18:57:39]
  • 评测
  • 测评结果:45
  • 用时:939ms
  • 内存:51512kb
  • [2024-11-04 18:57:39]
  • 提交

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'