QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#531662 | #5088. Two Choreographies | Tiga_Pilot_2 | WA | 47ms | 25020kb | C++20 | 4.0kb | 2024-08-24 21:33:52 | 2024-08-24 21:33:54 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define per(i, a, b) for(int i = a; i > (b); --i)
#define ar array
#define sz(x) (int) (x).size()
#define pii pair<int,int>
#define fi first
#define se second
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<double,double> pdd;
typedef pair<double,int> pdi;
typedef vector<int> vi;
#define all(x) (x).begin(), (x).end()
template<typename T>
void min_self(T& A, T B) {
A = min(A,B);
}
template<typename T>
void max_self(T& A, T B) {
A = max(A,B);
}
const int mxn=1e5;
int n;
struct UF {
vi e;
UF(int n) : e(n, -1) {}
bool sameSet(int a, int b) { return find(a) == find(b); }
int size(int x) { return -e[find(x)]; }
int find(int x) { return e[x] < 0 ? x : e[x] = find(e[x]); }
bool join(int a, int b) {
a = find(a), b = find(b);
if (a == b) return false;
if (e[a] > e[b]) swap(a, b);
e[a] += e[b]; e[b] = a;
return true;
}
};
template<class T>
struct RMQ {
vector<vector<T>> jmp;
RMQ(const vector<T>& V) : jmp(1, V) {
for (int pw = 1, k = 1; pw * 2 <= sz(V); pw *= 2, ++k) {
jmp.emplace_back(sz(V) - pw * 2 + 1);
rep(j,0,sz(jmp[k]))
jmp[k][j] = min(jmp[k - 1][j], jmp[k - 1][j + pw]);
}
}
T query(int a, int b) {
assert(a < b); // or return inf if a == b
int dep = 31 - __builtin_clz(b - a);
return min(jmp[dep][a], jmp[dep][b - (1 << dep)]);
}
};
struct LCA {
int T = 0;
vi time, path, ret,depth,pr;
RMQ<int> rmq;
LCA(vector<vi>& C, int rt) : time(sz(C)), depth(sz(C),0),pr(sz(C),rt), rmq((dfs(C,rt,-1), ret)) {}
void dfs(vector<vi>& C, int v, int par) {
time[v] = T++;
for (int y : C[v]) if (y != par) {
path.push_back(v), ret.push_back(time[v]);
depth[y] = depth[v]+1;
pr[y] = v;
dfs(C, y, v);
}
}
int lca(int a, int b) {
if (a == b) return a;
tie(a, b) = minmax(time[a], time[b]);
return path[rmq.query(a, b)];
}
int dist(int a,int b){return depth[a] + depth[b] - 2*depth[lca(a,b)];}
};
void solve() {
cin >>n;
UF uf(n);
vector adj(n, vi()),adj2(n,vi());
rep(i,0,n*2-3) {
int u,v; cin >>u >>v; u--,v--;
if(uf.join(u,v)) {
adj[u].push_back(v);
adj[v].push_back(u);
} else {
adj2[u].push_back(v);
}
}
vector st(n, set<int>());
rep(i,0,n) {
st[uf.find(i)].insert(i);
}
rep(i,0,n) {
if(sz(st[i])==0) continue;
LCA lca(adj, i);
map<int,pii> mp;
auto crtAns = [&](vi& ans, int u, int v) -> void {
vi tmp1, tmp2;
int lc = lca.lca(u,v);
int x = u;
while(x!=lc) {
tmp1.push_back(x);
x = lca.pr[x];
}
x = v;
while(x!=lc) {
tmp2.push_back(x);
x = lca.pr[x];
}
rep(i,0,sz(tmp1)) {
ans.push_back(tmp1[i]);
}
ans.push_back(lc);
per(i,sz(tmp2)-1,-1) {
ans.push_back(tmp2[i]);
}
};
for(auto u: st[i]) {
for(auto v: adj2[u]) {
int ds = lca.dist(u,v);
if(mp.count(ds)) {
cout <<ds+1 <<"\n";
vi ans1,ans2;
crtAns(ans1, u,v);
auto [u2,v2] = mp[ds];
crtAns(ans2, u2, v2);
rep(i,0,sz(ans1)) {
cout <<ans1[i]+1 <<" \n"[i==sz(ans1)-1];
}
rep(i,0,sz(ans2)) {
cout <<ans2[i]+1 <<" \n"[i==sz(ans2)-1];
}
return;
}
mp[ds] = {u,v};
}
}
}
cout <<"-1\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3596kb
input:
4 1 2 1 3 1 4 2 3 2 4
output:
3 2 1 4 2 1 3
result:
ok
Test #2:
score: 0
Accepted
time: 0ms
memory: 3648kb
input:
5 1 2 1 3 1 4 1 5 2 3 2 5 3 4
output:
3 2 1 5 2 1 3
result:
ok
Test #3:
score: 0
Accepted
time: 0ms
memory: 3648kb
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:
3 2 5 6 1 2 5
result:
ok
Test #4:
score: 0
Accepted
time: 0ms
memory: 3668kb
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:
4 16 2 4 6 4 2 16 1
result:
ok
Test #5:
score: 0
Accepted
time: 0ms
memory: 3640kb
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:
5 48 39 7 1 119 48 39 7 1 114
result:
ok
Test #6:
score: 0
Accepted
time: 4ms
memory: 5052kb
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:
19 1025 239 2264 1014 7808 42 7707 479 5791 320 23 281 334 5983 786 536 649 691 4508 926 899 4890 869 882 7727 11 896 770 7388 398 5791 320 23 281 334 5983 786 860
result:
ok
Test #7:
score: 0
Accepted
time: 45ms
memory: 24856kb
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:
53 17598 17140 48845 15595 19864 5294 57584 5414 74215 17577 3516 36275 2731 64854 3620 8108 90353 11654 15558 79658 6370 3671 7113 36423 13196 824 5288 82174 8745 5754 5428 10655 43628 2764 8898 10246 10591 22313 3594 46207 11743 76986 4903 3350 74050 13320 713 9507 28460 1223 3942 55444 15039 1717...
result:
ok
Test #8:
score: 0
Accepted
time: 47ms
memory: 25020kb
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:
33 16284 13946 66259 5980 4145 89115 2945 13194 11644 46865 9454 13251 3656 2929 88185 13999 8507 83300 11925 61171 3759 11497 7787 7746 1624 7681 8108 8620 8055 1987 15857 88425 16026 16238 1978 11775 30865 9693 11990 12351 11346 8641 11081 95698 14594 42700 2361 19522 7787 11497 3759 84987 11355 8...
result:
ok
Test #9:
score: -100
Wrong Answer
time: 0ms
memory: 3652kb
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]