QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#311874#7749. A Simple MST ProblemiliaaaaaTL 715ms111752kbC++201.3kb2024-01-22 22:15:362024-01-22 22:15:36

Judging History

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

  • [2024-01-22 22:15:36]
  • 评测
  • 测评结果:TL
  • 用时:715ms
  • 内存:111752kb
  • [2024-01-22 22:15:36]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
#define F first
#define S second
#define All(x) (x).begin(), (x).end()
#define len(x) (int) (x).size()
#define pb push_back

const int N = 1e6 + 7;
int n, par[N], w[N];
bool mark[N];

int get_par(int u) {
	return par[u] < 0? u: par[u] = get_par(par[u]);
}

bool merge(int u, int v) {
	u = get_par(u), v = get_par(v);
	if (u == v)
		return false;
	if (par[u] < par[v])
		swap(u, v);
	par[v] += par[u];
	par[u] = v;
	return true;
}

int32_t main() {
	ios:: sync_with_stdio(0), cin.tie(0), cout.tie(0);
	for (int i = 2; i < N; i++) 
		if (!mark[i]) 
			for (int j = i; j < N; j += i) 
				mark[j] = true, w[j]++;
	int q;
	cin >> q;
	memset(par, -1, sizeof par);
	while (q--) {
		int l, r;
		cin >> l >> r;
		vector<pair<int, pii>> ed;
		for (int i = 1; i <= r; i++) {
			int who, mn;
			mn = INT_MAX;
			for (int j = i; j <= r; j += i)
				if (j >= l && w[j] <= mn) 
					who = j, mn = w[j];
			for (int j = i; j <= r; j += i)
				if (j >= l)
					ed.pb({w[who] + w[j] - w[gcd(who, j)], {j, who}});
		}
		int ans = 0;
		sort(All(ed));
		for (auto e: ed) 
			if (merge(e.S.F, e.S.S))
				ans += e.F;
		for (int i = l; i <= r; i++)
			par[i] = -1;
		cout << ans << '\n';
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 15ms
memory: 12580kb

input:

5
1 1
4 5
1 4
1 9
19 810

output:

0
2
3
9
1812

result:

ok 5 lines

Test #2:

score: 0
Accepted
time: 130ms
memory: 26012kb

input:

2
27 30
183704 252609

output:

8
223092

result:

ok 2 lines

Test #3:

score: 0
Accepted
time: 142ms
memory: 25936kb

input:

1
183704 252609

output:

223092

result:

ok single line: '223092'

Test #4:

score: 0
Accepted
time: 715ms
memory: 111704kb

input:

2
639898 942309
30927 34660

output:

983228
11512

result:

ok 2 lines

Test #5:

score: 0
Accepted
time: 638ms
memory: 111752kb

input:

3
21731 33468
46192 370315
1712 3753

output:

34608
948775
5299

result:

ok 3 lines

Test #6:

score: 0
Accepted
time: 255ms
memory: 35980kb

input:

4
15237 67700
10918 86104
98287 116980
17432 23592

output:

148811
210927
60893
18687

result:

ok 4 lines

Test #7:

score: -100
Time Limit Exceeded

input:

5
5594 70302
19202 69588
5634 7877
59821 469300
97439 261121

output:


result: