QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#531662#5088. Two ChoreographiesTiga_Pilot_2WA 47ms25020kbC++204.0kb2024-08-24 21:33:522024-08-24 21:33:54

Judging History

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

  • [2024-08-24 21:33:54]
  • 评测
  • 测评结果:WA
  • 用时:47ms
  • 内存:25020kb
  • [2024-08-24 21:33:52]
  • 提交

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]