QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#343199#1652. One Piecengpin04RE 97ms22876kbC++204.0kb2024-03-02 04:39:122024-03-02 04:39:13

Judging History

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

  • [2024-03-02 04:39:13]
  • 评测
  • 测评结果:RE
  • 用时:97ms
  • 内存:22876kb
  • [2024-03-02 04:39:12]
  • 提交

answer

#include <bits/stdc++.h>
#define mp make_pair
#define fi first
#define se second
#define pb push_back
#define bit(n) (1LL << (n))
#define getbit(x, i) (((x) >> (i)) & 1)
#define pii pair<int, int>
#define ALL(x) x.begin(), x.end()
using namespace std;
const int M = 5e5 + 5;
const int N = 2e5 + 5;
const int mod = 1e9 + 7;
const int oo = 1e9;
const long long ooo = 1e18;
const double pi = acos(-1);

template<typename T1, typename T2> bool mini(T1 &a, T2 b) {if(a > b) a = b; else return 0; return 1;}
template<typename T1, typename T2> bool maxi(T1 &a, T2 b) {if(a < b) a = b; else return 0; return 1;}

typedef long long ll;

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    #ifndef ONLINE_JUDGE
    freopen("file.inp", "r",stdin);
    #endif
    int n; cin >> n;
    vector <vector <int>> adj(n);
    for (int i = 1; i < n; i++) {
        int u, v;
        cin >> u >> v;
        u--, v--;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    vector <int> a(n);
    for (int &x : a)
        cin >> x;

    vector <int> minval(n);
    vector <int> h(n, 0), f(n, 0);
    
    function <void(int, int)> dfs = [&](int u, int p) {
        minval[u] = a[u] - h[u];
        for (int v : adj[u]) if (v != p) {
            h[v] = h[u] + 1;
            dfs(v, u);
            mini(minval[u], minval[v]);
        }
    };

    h[0] = 0;
    dfs(0, -1);

    function <void(int, int, int)> dfs2 = [&](int u, int p, int cur) {
        f[u] = min(cur - h[u], minval[u] + h[u]);

        pair <int, int> pir = {a[u] - h[u], oo};
        for (int v : adj[u]) if (v != p) {
            if (mini(pir.se, minval[v])) {
                if (pir.se < pir.fi)
                    swap(pir.fi, pir.se);
            }
        }

        for (int v : adj[u]) if (v != p) {
            int val = (minval[v] == pir.fi) ? pir.se : pir.fi;
            dfs2(v, u, min(cur, val + 2 * h[u]));
        }
    };

    dfs2(0, -1, oo);
    // for (int x : f)
    //     cerr << x << " ";
    int r = 0;

    while (f[r] != 0) 
        r++;
    
    h[r] = 0;
    dfs(r, -1);

    int mx = r;
    for (int i = 0; i < n; i++) if (f[i] == 0) {
        if (h[i] > h[mx]) 
            mx = i;
    }
    // cerr << r << " " << mx << " " << h[mx] << "\n";

    function <void(int, int, vector <int>&)> getnodes = [&](int u, int p, vector <int> &s) {
        if (f[u] == 0) {
            s.push_back(u);
            return;
        }
        
        for (int v : adj[u]) if (v != p) {
            getnodes(v, u, s);   
        }
    };

    vector<pair <int, int>> ord;
    if (h[mx] % 2 == 0) {
        if (mx == r) {
            cout << r + 1 << " ";
        } else {
            for (int rep = 0; rep < h[mx] / 2; rep++) {
                for (int i : adj[mx]) {
                    if (h[i] < h[mx]) {
                        mx = i;
                        break;
                    }
                }
            }

            vector <int> s;
            assert(a[mx] == *min_element(ALL(a)));
            h[mx] = 0;
            for (int i : adj[mx]) {
                s.clear();
                getnodes(i, mx, s);
                for (int x : s) {
                    ord.push_back({s.size(), x});
                }
            }
        }
    } else {
        int lef = 0, rig = 0;
        for (int i = 0; i < n; i++) if (f[i] == 0) {
            if (h[i] < h[mx])
                lef++;
            else
                rig++;
        }

        for (int i = 0; i < n; i++) if (f[i] == 0) {
            if (h[i] < h[mx])
                ord.push_back({lef, i});
            else
                ord.push_back({rig, i});
        }
    }

    sort(ALL(ord));
    for (auto [sz, i] : ord) {
        cout << i + 1 << " ";
    }

    for (int i = 0; i < n; i++) if (f[i] > 0) {
        cout << i + 1 << " ";
    }

    for (int i = 0; i < n; i++) if (f[i] < 0) {
        cout << i + 1 << " ";
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3604kb

input:

5
1 2
1 3
2 4
2 5
2 2 3 3 3

output:

3 4 5 1 2 

result:

ok single line: '3 4 5 1 2 '

Test #2:

score: 0
Accepted
time: 0ms
memory: 3548kb

input:

4
2 1
3 2
3 4
1 0 1 2

output:

2 1 3 4 

result:

ok single line: '2 1 3 4 '

Test #3:

score: 0
Accepted
time: 0ms
memory: 3548kb

input:

1
0

output:

1 

result:

ok single line: '1 '

Test #4:

score: 0
Accepted
time: 0ms
memory: 3832kb

input:

2
1 2
0 1

output:

1 2 

result:

ok single line: '1 2 '

Test #5:

score: 0
Accepted
time: 0ms
memory: 3588kb

input:

3
2 3
1 2
2 1 1

output:

2 3 1 

result:

ok single line: '2 3 1 '

Test #6:

score: 0
Accepted
time: 0ms
memory: 3604kb

input:

4
3 2
1 4
3 1
1 3 2 1

output:

1 4 2 3 

result:

ok single line: '1 4 2 3 '

Test #7:

score: 0
Accepted
time: 0ms
memory: 3588kb

input:

4
4 3
4 2
1 2
3 2 2 1

output:

2 3 4 1 

result:

ok single line: '2 3 4 1 '

Test #8:

score: 0
Accepted
time: 0ms
memory: 3548kb

input:

4
3 2
1 2
4 1
1 2 3 1

output:

1 4 2 3 

result:

ok single line: '1 4 2 3 '

Test #9:

score: 0
Accepted
time: 0ms
memory: 3504kb

input:

4
3 1
2 3
2 4
3 1 2 0

output:

4 1 2 3 

result:

ok single line: '4 1 2 3 '

Test #10:

score: 0
Accepted
time: 0ms
memory: 3548kb

input:

4
2 4
3 4
1 4
2 2 2 1

output:

1 2 3 4 

result:

ok single line: '1 2 3 4 '

Test #11:

score: 0
Accepted
time: 0ms
memory: 3848kb

input:

5
4 5
2 3
2 1
5 3
4 3 2 1 1

output:

4 5 1 2 3 

result:

ok single line: '4 5 1 2 3 '

Test #12:

score: 0
Accepted
time: 0ms
memory: 3540kb

input:

5
2 5
3 1
3 4
3 5
0 3 1 2 2

output:

1 2 3 4 5 

result:

ok single line: '1 2 3 4 5 '

Test #13:

score: 0
Accepted
time: 0ms
memory: 3764kb

input:

5
2 3
2 5
1 3
1 4
1 3 2 1 4

output:

1 4 2 3 5 

result:

ok single line: '1 4 2 3 5 '

Test #14:

score: 0
Accepted
time: 0ms
memory: 3820kb

input:

5
3 4
1 2
2 5
3 2
3 2 2 3 3

output:

4 1 5 2 3 

result:

ok single line: '4 1 5 2 3 '

Test #15:

score: 0
Accepted
time: 0ms
memory: 3604kb

input:

5
5 1
3 2
5 4
5 3
3 3 2 3 2

output:

2 1 4 3 5 

result:

ok single line: '2 1 4 3 5 '

Test #16:

score: 0
Accepted
time: 0ms
memory: 3768kb

input:

6
2 4
6 2
5 2
5 3
1 4
1 1 3 0 2 2

output:

4 1 2 3 5 6 

result:

ok single line: '4 1 2 3 5 6 '

Test #17:

score: 0
Accepted
time: 0ms
memory: 3584kb

input:

6
3 5
5 6
4 2
2 1
6 1
3 4 3 5 2 2

output:

1 3 5 6 2 4 

result:

ok single line: '1 3 5 6 2 4 '

Test #18:

score: 0
Accepted
time: 0ms
memory: 3552kb

input:

6
5 2
6 5
6 3
4 6
2 1
2 1 4 4 2 3

output:

1 5 2 3 4 6 

result:

ok single line: '1 5 2 3 4 6 '

Test #19:

score: 0
Accepted
time: 0ms
memory: 3836kb

input:

6
1 6
5 6
1 4
2 4
3 5
2 4 2 3 1 1

output:

5 6 1 2 3 4 

result:

ok single line: '5 6 1 2 3 4 '

Test #20:

score: 0
Accepted
time: 0ms
memory: 3604kb

input:

6
4 5
1 3
6 3
3 2
3 5
2 2 1 3 2 2

output:

1 2 5 6 3 4 

result:

ok single line: '1 2 5 6 3 4 '

Test #21:

score: 0
Accepted
time: 0ms
memory: 3548kb

input:

7
7 6
7 5
4 1
3 2
4 7
2 7
3 3 4 2 3 3 2

output:

1 2 5 6 4 7 3 

result:

ok single line: '1 2 5 6 4 7 3 '

Test #22:

score: 0
Accepted
time: 0ms
memory: 3584kb

input:

7
6 7
4 1
3 6
4 7
6 2
5 2
2 3 3 1 4 2 1

output:

4 7 1 2 3 5 6 

result:

ok single line: '4 7 1 2 3 5 6 '

Test #23:

score: 0
Accepted
time: 0ms
memory: 3588kb

input:

7
7 5
4 7
6 7
1 2
3 7
7 2
2 1 2 2 2 2 1

output:

2 7 1 3 4 5 6 

result:

ok single line: '2 7 1 3 4 5 6 '

Test #24:

score: 0
Accepted
time: 0ms
memory: 3544kb

input:

7
4 7
4 1
4 2
5 3
3 7
3 6
2 1 3 1 4 4 2

output:

2 4 1 3 5 6 7 

result:

ok single line: '2 4 1 3 5 6 7 '

Test #25:

score: 0
Accepted
time: 0ms
memory: 3556kb

input:

8
3 4
1 4
1 6
7 4
8 5
4 5
6 2
2 4 2 1 2 3 2 3

output:

1 3 5 7 4 2 6 8 

result:

ok single line: '1 3 5 7 4 2 6 8 '

Test #26:

score: 0
Accepted
time: 0ms
memory: 3768kb

input:

8
7 5
1 7
3 6
7 4
6 7
8 6
2 5
3 4 2 3 3 1 2 1

output:

6 8 1 2 3 4 5 7 

result:

ok single line: '6 8 1 2 3 4 5 7 '

Test #27:

score: 0
Accepted
time: 0ms
memory: 3600kb

input:

8
5 7
1 7
8 7
6 5
3 7
4 5
2 5
3 2 3 1 1 2 2 3

output:

4 5 1 2 3 6 7 8 

result:

ok single line: '4 5 1 2 3 6 7 8 '

Test #28:

score: 0
Accepted
time: 0ms
memory: 3840kb

input:

8
8 7
4 6
2 4
3 8
8 1
8 2
2 5
2 2 2 3 3 4 2 1

output:

1 2 3 7 8 4 5 6 

result:

ok single line: '1 2 3 7 8 4 5 6 '

Test #29:

score: 0
Accepted
time: 0ms
memory: 3588kb

input:

8
3 2
6 1
3 5
3 7
8 2
4 6
6 2
3 2 3 3 4 2 4 3

output:

1 3 4 8 2 6 5 7 

result:

ok single line: '1 3 4 8 2 6 5 7 '

Test #30:

score: 0
Accepted
time: 97ms
memory: 22876kb

input:

250000
27197 102813
107013 109797
16583 152577
164884 11838
214586 173971
248203 141910
7896 111843
80520 130209
6277 128026
55601 234265
95559 88739
152936 50808
194534 24226
159232 83111
103712 33855
142546 246859
40404 81467
125784 239727
24202 165110
57020 155999
133375 118407
156303 150104
1493...

output:

10 23 36 42 44 70 71 101 111 113 116 141 177 183 204 217 221 251 252 253 260 264 271 272 307 318 325 328 338 360 397 423 429 442 494 506 518 521 526 537 564 567 602 633 673 683 721 738 739 744 754 770 827 835 837 865 872 890 893 914 946 948 967 973 981 1003 1014 1063 1068 1083 1118 1133 1152 1166 11...

result:

ok single line: '10 23 36 42 44 70 71 101 111 1...50 249954 249976 249982 249986 '

Test #31:

score: -100
Runtime Error

input:

250000
198658 122606
213093 143827
45640 230664
242707 66336
228202 70151
54424 136589
31088 11371
216202 169155
131901 199050
54921 227981
114533 38096
180601 164687
21723 12006
68933 157358
93093 147993
50664 240700
41575 183691
172663 45572
194543 35989
237102 202526
171096 138704
245144 179222
2...

output:


result: