QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#600305 | #8838. Jesse's Job | xydCatGirl# | WA | 2ms | 11812kb | C++14 | 1.4kb | 2024-09-29 15:48:01 | 2024-09-29 15:48:03 |
Judging History
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;
}
Details
Tip: Click on the bar to expand more detailed information
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)