UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#213595#573. t2WZRYWZWY30134ms3308kbC++111.5kb2024-11-12 21:31:332024-11-12 23:52:54

answer

#include <bits/stdc++.h> // 这下是自己写的了( 
using namespace std;

const int N = 1e5 + 5;

struct node {
	int u, v, w;
} e[N];

int fa[N], siz[N], f[N];
bool vis[N];

int find(int x) {
	return x == fa[x] ? x : fa[x] = find(fa[x]);
}

int main() {
	cin.tie(0); ios::sync_with_stdio(0);
	int n, q; cin >> n >> q;
	for (int i = 1; i < n; i++) {
		int u, v, w; cin >> u >> v >> w;
		e[i].u = u, e[i].v = v, e[i].w = w;
	}
	
	for (int d = 1; d <= 100; d++) {
		int cnt = 0;
		for (int i = 1; i <= n; i++) {
			fa[i] = i; siz[i] = 1;
			vis[i] = 0;
		}
		for (int i = 1; i < n; i++) {
			if (e[i].w % d == 0) {
				int fx = find(e[i].u), fy = find(e[i].v);
				if (fx != fy) {
					fa[fx] = fy;
					siz[fy] += siz[fx];
				}
			}
		}
		for (int i = 1; i <= n; i++) {
			bool &x = vis[find(i)];
			if (!x) {
				x = 1;
				cnt += siz[find(i)] * (siz[find(i)] - 1) / 2;
			}
		}
		
		f[d] = cnt;
	}
	
	while (q--) {
		int d, cnt = 0; cin >> d;
		if (d <= 100) cout << f[d] << "\n";
		else {
			int cnt = 0;
			for (int i = 1; i <= n; i++) {
				fa[i] = i; siz[i] = 1;
				vis[i] = 0;
			}
			for (int i = 1; i < n; i++) {
				if (e[i].w % d == 0) {
					int fx = find(e[i].u), fy = find(e[i].v);
					if (fx != fy) {
						fa[fx] = fy;
						siz[fy] += siz[fx];
					}
				}
			}
			for (int i = 1; i <= n; i++) {
				bool &x = vis[find(i)];
				if (!x) {
					x = 1;
					cnt += siz[find(i)] * (siz[find(i)] - 1) / 2;
				}
			}
				
			f[d] = cnt;
			cout << f[d] << "\n";
		}
	}
}

详细

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

Subtask #1:

score: 30
Accepted

Test #1:

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

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: 1364kb

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: 1372kb

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: 0ms
memory: 1344kb

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: 1360kb

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: 0ms
memory: 1352kb

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: 1340kb

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: 1352kb

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: 1336kb

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: 1352kb

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: 0
Wrong Answer

Test #11:

score: 0
Wrong Answer
time: 134ms
memory: 3308kb

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:

wrong answer 20th words differ - expected: '4999950000', found: '704982704'

Subtask #3:

score: 0
Time Limit Exceeded

Test #21:

score: 0
Time Limit Exceeded

input:

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

output:

8
2270
96901
1
2085
1584
4228
9112
6
0
2
0
11
1035
2833
0
704982704
2
2
1294
6056
2221
4398
1587
497...

result: