QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#532779 | #5088. Two Choreographies | BongoCatEnjoyer# | WA | 84ms | 36368kb | C++14 | 3.2kb | 2024-08-25 11:40:34 | 2024-08-25 11:40:35 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define forn(i, n) for (ll i = 0; i < n; ++i)
#define forr(i, s, n) for (ll i = s; i < n; ++i)
#define fori(i, s, n) for (ll i = s; i > n; --i)
#define fora(i, n) for (auto i: n)
#define vi vector<int>
#define vll vector<ll>
#define prints(n) cout << (n) << " "
#define println(n) cout << (n) << "\n"
const int MOD = 998244353;
// const int MOD = 1e9 + 7;
vector<vi> adj;
vi dep;
vi par;
vector<vi> spt;
vi vis;
vector<pair<int, int>> vp;
vector<vector<pair<int, int>>> cy;
void dfs(int u, int p=0, int d=0) {
// cout << u + 1 << ' ' << p + 1 << ' ' << d << '\n';
if (vis[u]) {
vp.emplace_back(u, p);
return;
}
dep[u] = d;
par[u] = p;
vis[u] = 1;
for (int v: adj[u]) {
if (v == p) continue;
dfs(v, u, d + 1);
}
}
int lca(int u, int v) {
if (dep[u] < dep[v]) swap(u, v);
int jarak = dep[u] - dep[v];
forn(i, 18) {
if (jarak & (1 << i)) u = spt[u][i];
}
for (int i = 17; i >= 0; i--) {
if (spt[u][i] != spt[v][i]) {
u = spt[u][i];
v = spt[v][i];
}
}
while (u != v) {
u = par[u];
v = par[v];
}
return u;
}
int jarak (int u, int v) {
return dep[u] + dep[v] - 2 * dep[lca(u, v)];
}
void procSpt() {
forn(b, 18) {
forn(i, adj.size()) {
if (b) spt[i][b] = spt[spt[i][b - 1]][b - 1];
else spt[i][b] = par[i];
}
}
}
void proc() {
forn(i, vp.size()) {
if (vp[i].first > vp[i].second) swap(vp[i].first, vp[i].second);
}
sort(vp.begin(), vp.end());
vp.erase(unique(vp.begin(), vp.end()), vp.end());
forn(i, vp.size()) {
int u = vp[i].first, v = vp[i].second;
int j = jarak(u, v);
cy[j].push_back({u, v});
}
}
void printcycle(int u, int v) {
int _lca = lca(u, v);
stack<int> rev;
while (u != _lca) {
rev.push(u+1);
u = par[u];
}
cout << v + 1<< ' ';
while (v != _lca) {
v = par[v];
cout << v + 1 << ' ';
}
while (!rev.empty()) {
cout << rev.top() << (rev.size() == 1 ? "" : " ");
rev.pop();
}
cout << '\n';
}
void solve() {
int n;
cin >> n;
adj.resize(n);
dep = vi(n, 0);
par = vi(n, 0);
vis = vi(n, 0);
cy = vector<vector<pair<int, int>>>(n+2, vector<pair<int, int>>());
spt = vector<vi>(n, vi(18, 0));
forn(i, 2*n - 3) {
int u, v;
cin >> u >> v;
--u, --v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(0);
procSpt();
proc();
for(int i = cy.size() - 1; i >= 2; i--) {
if (cy[i].size() > 1) {
cout << i + 1 << '\n';
printcycle(cy[i][0].first, cy[i][0].second);
printcycle(cy[i][1].first, cy[i][1].second);
return;
}
}
cout << -1 << '\n';
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3560kb
input:
4 1 2 1 3 1 4 2 3 2 4
output:
3 3 2 1 4 2 1
result:
ok
Test #2:
score: 0
Accepted
time: 0ms
memory: 3864kb
input:
5 1 2 1 3 1 4 1 5 2 3 2 5 3 4
output:
3 3 2 1 5 2 1
result:
ok
Test #3:
score: 0
Accepted
time: 0ms
memory: 3872kb
input:
7 1 2 3 4 5 6 5 2 3 1 6 1 4 2 4 5 2 6 3 6 1 5
output:
5 3 6 5 2 1 4 3 6 5 2
result:
ok
Test #4:
score: 0
Accepted
time: 0ms
memory: 3636kb
input:
40 1 16 1 40 2 4 2 16 2 36 3 25 3 38 4 1 4 13 5 11 5 27 6 4 7 5 7 11 8 10 8 14 8 24 9 34 10 20 12 35 13 2 14 10 14 20 15 18 15 28 15 31 16 6 16 13 17 5 17 11 17 27 18 9 19 1 19 4 19 16 20 24 21 12 21 33 21 35 22 38 23 12 23 21 25 28 25 31 25 34 25 38 26 14 26 20 27 7 27 11 28 3 28 31 29 16 29 19 30 ...
output:
5 19 4 2 16 1 36 29 19 4 2
result:
ok
Test #5:
score: 0
Accepted
time: 0ms
memory: 3632kb
input:
201 1 7 1 114 1 119 2 49 2 93 4 197 5 139 6 1 6 27 7 39 7 121 8 127 9 130 9 145 11 106 11 136 11 193 12 2 12 116 13 55 13 69 13 105 13 187 13 196 14 144 14 177 15 127 15 134 15 145 15 155 15 184 15 199 16 96 16 177 17 20 21 100 22 68 22 71 22 81 22 142 23 148 23 190 24 12 24 81 24 89 25 158 25 159 2...
output:
19 136 11 175 123 158 25 35 163 176 119 109 48 50 82 95 97 153 31 34 153 97 95 82 50 48 109 119 176 163 35 25 158 123 159 104 150 18 114
result:
ok
Test #6:
score: 0
Accepted
time: 5ms
memory: 5816kb
input:
8000 2 1508 2 3068 3 5268 3 5501 6 266 6 2737 6 3197 6 5863 6 6697 7 3492 9 427 9 794 9 3114 9 5509 10 2257 10 4348 11 1479 11 1957 11 2230 11 2500 11 3182 11 4399 11 5051 11 7727 12 7669 13 1403 13 5753 14 2871 14 6956 14 7959 15 6902 17 1630 17 3155 17 5950 18 7232 19 125 19 3280 19 5648 20 6879 2...
output:
944 6027 6164 5360 6297 4459 4464 6987 6672 4060 5622 3870 7823 4555 6146 4978 5508 7339 3268 3601 2794 2088 7957 7581 2214 761 5650 5642 4799 4172 1129 4700 1871 4731 4574 7463 6389 3869 6028 5267 7359 3648 5228 4980 3914 256 1567 3910 2511 7425 5681 4953 4722 4805 7566 7397 2278 4383 2981 6226 781...
result:
ok
Test #7:
score: 0
Accepted
time: 84ms
memory: 36132kb
input:
99999 1 11261 1 21544 2 9017 2 63063 2 97990 3 11995 3 42473 4 19846 5 38099 6 35872 6 80509 7 73231 8 12356 9 35384 10 45091 12 86727 13 4938 13 48917 14 62383 14 89846 15 28458 15 44277 15 51725 15 84522 16 93258 17 13934 17 42238 18 19000 19 11278 19 23672 19 61502 19 78791 20 85057 20 88080 21 2...
output:
11855 94299 497 26778 17287 34574 23381 44263 3505 16865 9157 6653 61356 23295 22703 10160 7182 6039 14164 63923 26223 20343 24850 39027 3438 846 50885 12088 40417 25511 29728 75160 76858 52195 35294 25929 28348 1618 94166 72148 18525 25513 9702 11751 16631 19367 30184 19241 552 8746 6171 99363 7693...
result:
ok
Test #8:
score: 0
Accepted
time: 73ms
memory: 36368kb
input:
100000 1 68531 2 97359 4 68578 4 83098 4 98443 5 8053 5 30270 5 86617 6 7074 6 12266 6 69396 7 52675 7 78316 7 90757 7 92242 8 32677 8 41353 8 41457 8 74508 9 44234 10 4973 10 38390 10 96049 11 28007 11 68620 13 3016 14 36748 15 8147 15 25110 15 28489 15 72947 15 99347 16 70760 17 12774 17 68407 17 ...
output:
11731 86675 86391 97303 80968 70568 73517 8598 75953 77834 55547 93362 97374 3947 56779 40231 19318 4596 99590 93229 93945 37468 39018 3674 81719 89949 44135 25133 87280 16343 18378 63143 66110 82569 74903 68215 70996 28464 26473 35118 90786 61289 71810 84475 77881 84153 98256 20192 29257 55840 8960...
result:
ok
Test #9:
score: -100
Wrong Answer
time: 0ms
memory: 3620kb
input:
7 1 2 2 3 3 4 4 5 5 6 6 7 7 5 1 4 7 3 1 6 7 1
output:
-1
result:
wrong answer Integer -1 violates the range [3, 7]