UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#213632#573. t2shiruiheng605149ms12108kbC++112.1kb2024-11-12 22:08:512024-11-12 23:59:14

answer

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
//using LL = __int128
#define pi pair<ll, ll>
#define fi first
#define se second
//#define fi(x) (x->first)
//#define se(x) (x->second)
#define N 111111
ll sum[N], sz[N], nxt[N], d[N], fa[N], cnt[N], ans[N], n, q, u, v, w, mx;
vector<pi> g[N];
void add(int u, int v, int w, bool bj = 1){
	g[u].push_back({v, w});
	if(bj)
		add(v, u, w, 0);
}
void dfs(int u, int f){
	sz[u] = 1;
	for(auto x : g[u]){
		ll v = x.fi;
		if(v == f)
			continue;
		dfs(v, u);
		sz[u] += sz[v];
	}
	for(auto x : g[u])
		cnt[x.se] += sz[u] * (n - sz[u]);
}
void init(){
	for(int i = 1 ; i <= n ; i++)
		fa[i] = i, cnt[i] = 1;
}
ll find(int u){
	return fa[u] == u ? u : fa[u] = find(fa[u]);
}
void merge(int x, int y){
	int fx = find(x), fy = find(y);
	if(fx == fy)
		return;
	if(cnt[fx] < cnt[fy])
		swap(fx, fy);
	fa[fy] = fx;
	cnt[fx] += cnt[fy];
}
void print(){
	for(int i = 1 ; i <= q ; i++)
		printf("%lld\n", ans[i]);
}
int main(){
	scanf("%lld%lld", &n, &q);
	for(int i = 1 ; i < n ; i++){
		scanf("%lld%lld%lld", &u, &v, &w);
		add(u, v, w);
		mx = max(mx, w);
	}
	//dfs(1, 1);
	for(int i = 1 ; i <= q ; i++)
		scanf("%lld", &d[i]);
	if((q <= 50) && (n <= 50)){
		for(int i = 1 ; i <= q ; i++){
			init();
			for(int u = 1 ; u <= n ; u++)
				for(auto x : g[u]){
					int v = x.fi, w = x.se;
					if(w % d[i] == 0)
						merge(u, v);
				}
			for(int u = 1 ; u <= n ; u++)
				if(find(u) == u)
					ans[i] += cnt[u] * (cnt[u] - 1) / 2;
		}
		print();
		return 0;
	}
	if((max(*max_element(d + 1, d + 1 + n), mx) <= 100)){
		for(int i = 1 ; i <= q ; i++){
			if(sz[d[i]]){
				ans[i] = sz[d[i]];
				continue;
			}
			init();
			for(int u = 1 ; u <= n ; u++)
				for(auto x : g[u]){
					int v = x.fi, w = x.se;
					if(w % d[i] == 0)
						merge(u, v);
				}
			for(int u = 1 ; u <= n ; u++)
				if(find(u) == u)
					ans[i] += cnt[u] * (cnt[u] - 1) / 2;
			sz[d[i]] = ans[i];
		}
		print();
		;
		return 0;
	}
	return 0;
}
/*
	freopen(".in", "r", stdin);
	freopen(".out", "w", stdout);

*/

详细

小提示:点击横条可展开更详细的信息

Subtask #1:

score: 30
Accepted

Test #1:

score: 30
Accepted
time: 0ms
memory: 3844kb

input:

50 50
48 29 49788
47 48 31142
35 48 28665
10 35 23889
39 35 6411
50 39 66666
43 35 27629
46 10 49173...

output:

2
1
0
0
0
2
0
0
0
0
0
0
1
10
0
0
1
0
0
2
0
1
0
2
0
0
0
0
0
2
0
0
0
0
2
0
0
0
1
0
0
1
0
2
1
2
0
0
0
0

result:

ok 50 tokens

Test #2:

score: 0
Accepted
time: 0ms
memory: 3844kb

input:

50 50
48 29 36145
47 29 82496
35 47 66171
10 47 40597
39 48 64355
50 48 98687
43 39 15472
46 35 3729...

output:

0
0
0
4
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
3
1
0
13
0
0
1
0
1
1
0
20
1
1
0
6
0
0
1

result:

ok 50 tokens

Test #3:

score: 0
Accepted
time: 0ms
memory: 3848kb

input:

50 50
48 29 38855
47 29 33850
35 29 87324
10 29 73658
39 48 22299
50 47 14355
43 29 86962
46 47 4177...

output:

0
0
1
0
9
0
0
1
0
0
0
0
0
2
0
0
0
0
1
0
0
2
2
0
0
0
0
0
0
2
0
0
0
0
0
0
0
0
3
58
0
0
0
0
0
3
0
0
0
0

result:

ok 50 tokens

Test #4:

score: 0
Accepted
time: 3ms
memory: 3848kb

input:

50 50
48 29 25212
47 48 68851
35 48 24830
10 47 90366
39 10 96596
50 10 30023
43 47 58452
46 29 2989...

output:

0
6
0
1
7
4
0
3
1
0
7
0
1
0
0
0
0
4
0
6
0
7
0
0
0
4
2
3
0
0
0
6
0
0
0
0
0
4
6
3
1
3
0
0
4
0
0
0
1
6

result:

ok 50 tokens

Test #5:

score: 0
Accepted
time: 0ms
memory: 3848kb

input:

50 50
48 29 27922
47 29 20205
35 29 45983
10 48 7074
39 10 54540
50 29 62044
43 10 29942
46 43 34375...

output:

0
0
0
0
14
0
0
0
2
0
0
2
1
0
0
0
0
0
0
3
0
0
0
2
0
1
1
0
0
18
0
0
0
0
0
0
3
1
1
0
1
0
0
0
2
0
0
25
1...

result:

ok 50 tokens

Test #6:

score: 0
Accepted
time: 3ms
memory: 3848kb

input:

50 50
48 29 14279
47 48 71559
35 48 83489
10 35 23782
39 47 12484
50 47 77712
43 50 1432
46 50 22499...

output:

0
0
1
3
24
0
0
0
1
2
0
10
2
0
0
0
1
0
0
0
0
0
10
0
0
0
0
0
0
1
0
0
1
0
1
2
0
0
0
0
0
0
0
93
0
0
0
0
...

result:

ok 50 tokens

Test #7:

score: 0
Accepted
time: 0ms
memory: 3852kb

input:

50 50
48 29 636
47 29 22913
35 47 4642
10 47 40490
39 29 70428
50 10 9733
43 48 72922
46 10 26976
14...

output:

2
0
0
0
3
0
0
7
0
1
1
0
99
0
0
0
0
0
0
0
0
0
0
0
0
99
0
2
2
0
6
3
0
0
2
0
0
3
4
0
0
3
0
0
1
0
1
1
2
0

result:

ok 50 tokens

Test #8:

score: 0
Accepted
time: 0ms
memory: 3844kb

input:

50 50
48 29 3346
47 48 57914
35 29 42148
10 29 73551
39 29 44725
50 39 25401
43 35 60765
46 35 15100...

output:

0
1225
0
0
0
0
0
0
0
0
0
1
1
0
0
1
0
2
0
0
0
0
0
0
0
0
3
0
0
2
0
0
1
0
0
0
0
0
2
0
0
0
0
4
0
1
0
0
0
2

result:

ok 50 tokens

Test #9:

score: 0
Accepted
time: 0ms
memory: 3848kb

input:

50 50
48 29 89703
47 29 9268
35 47 63301
10 35 90259
39 35 2669
50 48 41069
43 39 32255
46 47 19577
...

output:

0
0
0
2
0
0
0
0
0
1
0
5
1
0
0
1
0
2
0
1
2
0
5
0
6
0
3
4
0
0
0
0
3
0
0
0
5
2
0
3
0
0
1
0
0
0
0
0
0
0

result:

ok 50 tokens

Test #10:

score: 0
Accepted
time: 0ms
memory: 3844kb

input:

50 50
48 29 92413
47 48 60622
35 29 807
10 48 6967
39 35 60613
50 35 73090
43 29 3745
46 29 7701
14 ...

output:

0
0
0
0
0
0
0
0
1
1
1
0
1
0
0
1
2
1
2
0
0
4
0
0
0
0
0
0
0
2
0
0
0
0
7
0
1
0
0
0
0
0
0
0
6
0
2
0
0
0

result:

ok 50 tokens

Subtask #2:

score: 30
Accepted

Test #11:

score: 30
Accepted
time: 696ms
memory: 12108kb

input:

100000 100000
73595 40695 76
13615 40695 96
65545 13615 84
19391 13615 76
2353 73595 27
26730 40695 ...

output:

12815
1065
2028
53298
627586
19060
4345
1010
16097
1032
1044
1054
3191
16097
1055
627586
19060
978
9...

result:

ok 100000 tokens

Test #12:

score: 0
Accepted
time: 492ms
memory: 12100kb

input:

100000 100000
73595 40695 70
13615 73595 52
65545 73595 51
19391 73595 72
2353 19391 18
26730 13615 ...

output:

975
1028
15852
1040
15852
5571
23908
49914
1010
15852
646494
12387
4999950000
20056
2104
4999950000
...

result:

ok 100000 tokens

Test #13:

score: 0
Accepted
time: 496ms
memory: 12092kb

input:

100000 100000
73595 40695 64
13615 40695 61
65545 13615 71
19391 65545 15
2353 19391 9
26730 19391 4...

output:

1041
2062
14285
23281
49485
12419
996
1018
1011
19672
19672
1036
23281
3195
4999950000
12419
1018
20...

result:

ok 100000 tokens

Test #14:

score: 0
Accepted
time: 476ms
memory: 12096kb

input:

100000 100000
73595 40695 58
13615 73595 70
65545 40695 38
19391 13615 58
2353 13615 47
26730 40695 ...

output:

23392
993
1036
13972
5412
1022
19503
3237
48221
23392
981
958486
1004
980
23392
993
48221
1020
980
1...

result:

ok 100000 tokens

Test #15:

score: 0
Accepted
time: 480ms
memory: 12096kb

input:

100000 100000
73595 40695 52
13615 40695 26
65545 73595 58
19391 40695 1
2353 13615 38
26730 13615 9...

output:

1021
48268
4999950000
998
2011
94940
1049
19311
19311
33716
48268
15508
2124
1040
985
15508
8140
482...

result:

ok 100000 tokens

Test #16:

score: 0
Accepted
time: 498ms
memory: 12096kb

input:

100000 100000
73595 40695 46
13615 73595 35
65545 40695 25
19391 13615 97
2353 40695 76
26730 65545 ...

output:

12645
997
1042
4999950000
1060
23020
4222
974
5631
19302
2078
1030
48335
2033
1002
1986
1018
6806
19...

result:

ok 100000 tokens

Test #17:

score: 0
Accepted
time: 486ms
memory: 12096kb

input:

100000 100000
73595 40695 40
13615 40695 91
65545 73595 45
19391 73595 40
2353 40695 67
26730 2353 4...

output:

9577
5383
23807
997
941
1013
19428
1003
95552
1024
49914
12451
2082
1109
49914
95552
49914
499995000...

result:

ok 100000 tokens

Test #18:

score: 0
Accepted
time: 492ms
memory: 12096kb

input:

100000 100000
73595 40695 34
13615 40695 100
65545 13615 12
19391 65545 83
2353 65545 58
26730 73595...

output:

4999950000
4416
2028
94412
4999950000
14337
1002
12327
23226
1038
6629
998
5505
1059
14337
2064
1042...

result:

ok 100000 tokens

Test #19:

score: 0
Accepted
time: 492ms
memory: 12096kb

input:

100000 100000
73595 40695 28
13615 73595 56
65545 40695 79
19391 13615 26
2353 65545 96
26730 65545 ...

output:

1031
93090
15639
3190
19477
1041
32364
12280
14143
47814
3110
416410
32364
22889
19477
4999950000
49...

result:

ok 100000 tokens

Test #20:

score: 0
Accepted
time: 495ms
memory: 12088kb

input:

100000 100000
73595 40695 22
13615 40695 65
65545 13615 99
19391 40695 22
2353 73595 87
26730 19391 ...

output:

33139
4999950000
3015
33139
91207
2093
944
1051
1006
1009
91207
15171
5538
33139
1031
2021
1018
9120...

result:

ok 100000 tokens

Subtask #3:

score: 0
Wrong Answer

Test #21:

score: 0
Wrong Answer
time: 40ms
memory: 9716kb

input:

100000 100000
73595 40695 12816
13615 73595 81821
65545 40695 75866
19391 65545 1165
2353 73595 3737...

output:


result:

wrong answer Unexpected EOF in the participants output