QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#600305#8838. Jesse's JobxydCatGirl#WA 2ms11812kbC++141.4kb2024-09-29 15:48:012024-09-29 15:48:03

Judging History

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

  • [2024-09-29 15:48:03]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:11812kb
  • [2024-09-29 15:48:01]
  • 提交

answer

#include <bits/stdc++.h>

using i64 = long long;

constexpr int N = 1e6 + 5;

struct DSU {
	static constexpr int N = 1e6 + 5;
	int n, fa[N], siz[N];
	void init(int _n) { n = _n; for (int i = 1; i <= n; i++) fa[i] = i, siz[i] = 1; }
	int father(int u) { return fa[u] = (fa[u] == u ? u : father(fa[u])); }
	void merge(int u, int v) {
		u = father(u), v = father(v);
		if (u == v) return;
		if (siz[u] < siz[v]) std::swap(u, v);
		fa[v] = u; siz[u] += siz[v];
	} 
	bool isSame(int u, int v) { return father(u) == father(v); }
} dsu;

int T, n, a[N], b[N], vis[N];

void solve() {
	std::cin >> n; dsu.init(n);
	for (int i = 1; i <= n; i++) std::cin >> a[i], b[a[i]] = i, vis[i] = 0, dsu.merge(i, a[i]);
	int cnt = 0;
	for (int i = 1; i <= n; i++) cnt += (dsu.father(i) == i);
	if (cnt >= 2) {
		std::vector<int> ans; int cur = 1;
		while (!vis[cur]) {
			ans.push_back(cur); vis[cur] = 1;
			cur = a[cur];
		}
		std::cout << n << "\n" << ans.size() << "\n";
		for (auto _ : ans) std::cout << _ << " ";
		std::cout << "\n";
		return;
	}
	std::cout << n - 2 << "\n";
	std::vector<int> ans = {1}; int cur = 1; 
	while (a[cur] != n) cur = a[cur], ans.push_back(cur);
	std::cout << ans.size() << "\n"; std::sort(ans.begin(), ans.end());
	for (auto _ : ans) std::cout << _ << " ";
	std::cout << "\n";
}

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	std::cin >> T;
	while (T--) solve();

	return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 11812kb

input:

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

output:

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

result:

wrong answer Participant didn't find permutation (test case 3)