QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#600309#8838. Jesse's JobxydCatGirl#WA 2ms11980kbC++141.4kb2024-09-29 15:49:222024-09-29 15:49:23

Judging History

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

  • [2024-09-29 15:49:23]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:11980kb
  • [2024-09-29 15:49:22]
  • 提交

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 << b[_] << " ";
		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";
	for (auto _ : ans) std::cout << b[_] << " ";
	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: 100
Accepted
time: 0ms
memory: 11752kb

input:

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

output:

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

result:

ok Correct (3 test cases)

Test #2:

score: -100
Wrong Answer
time: 2ms
memory: 11980kb

input:

872
6
1 5 2 6 3 4
6
5 2 1 3 4 6
4
2 1 3 4
6
2 3 1 4 5 6
6
4 5 1 6 2 3
6
6 2 3 1 4 5
5
2 1 3 4 5
6
1 2 6 4 3 5
4
2 1 4 3
6
1 6 4 2 5 3
6
6 1 3 5 4 2
6
2 1 4 5 6 3
6
3 4 1 5 6 2
6
4 1 5 3 2 6
6
5 2 1 6 3 4
6
4 1 6 2 5 3
6
5 1 3 6 2 4
6
6 2 5 4 3 1
6
6 2 5 3 1 4
6
5 2 4 1 3 6
6
6 1 3 2 4 5
6
2 3 4 6 5 ...

output:

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

result:

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