TLE on test 5 求调
查看原帖
TLE on test 5 求调
360265
Galois_Field_1048576楼主2024/8/11 09:27

如题, 使用 AtCoder Library.

void solve(vector<int> &pos) {
	int n;
	cin >> n;
	mf_graph<int> G(4 * n + 2);
	int source = 4 * n, sink = 4 * n + 1;
	vector<int> a(n);

	for (int &x : a)
		cin >> x;

	sort(a.begin(), a.end());

	for (int i = 0; i < n; i++)
		pos[a[i]] = i, ae(G, i, i + n * 3, 1);

	for (int i = 0; i < n * 2; i++)
		ae(G, source, i, 1), ae(G, i + n * 2, sink, 1);

	if (n > 1000) {
		for (int i = 1; i <= a.back(); i++)
			if (pos[i] >= 0)
				for (int j = i * 2; j <= a.back(); j += i)
					if (pos[j] >= 0)
						ae(G, pos[i], pos[j] + n * 2, 1),
						ae(G, pos[i] + n, pos[j] + n * 3, 1);
	} else
		for (int i = 0; i < n; i++)
			for (int j = i + 1; j < n; j++)
				if (a[j] % a[i] == 0)
					ae(G, i, j + n * 2, 1),
					ae(G, i + n, j + n * 3, 1);


	cout << (G.flow(source, sink) - n) << endl;

	for (int i = 0; i < n; i++)
		pos[a[i]] = -1;
}

signed main() {
	vector<int> pos(50001, -1);

	int T;
	cin >> T;

	while (T --)
		solve(pos);
}

前面是 AtCoder Library, mf_graph 为实现最大流功能的函数.

2024/8/11 09:27
加载中...