QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#532779#5088. Two ChoreographiesBongoCatEnjoyer#WA 84ms36368kbC++143.2kb2024-08-25 11:40:342024-08-25 11:40:35

Judging History

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

  • [2024-08-25 11:40:35]
  • 评测
  • 测评结果:WA
  • 用时:84ms
  • 内存:36368kb
  • [2024-08-25 11:40:34]
  • 提交

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]