답안 #1000524

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1000524 2024-06-17T16:28:13 Z onbert Jail (JOI22_jail) C++17
26 / 100
1312 ms 272012 KB
#include <bits/stdc++.h>
using namespace std;

void add(vector<pair<int,int>> &v, int &L, int &R) {
    if (v.size() > 0 && R+1 == v.back().first) v.back().first = L;
    else v.push_back({L, R});
}

const int maxn = 120005, maxN = 480005, lgn = 17, INF = 1e6;
int n, m;
vector<int> ADJ[maxn], adj[maxn];
pair<int,int> a[maxn];
int sz[maxn], fa[maxn], d[maxn], newid[maxn], lim[maxn], cnter = 0;

bool cmp(int &x, int &y) {
    return sz[x] > sz[y];
}

void dfs1(int u) {
    sz[u] = 1;
    for (int v:ADJ[u]) {
        ADJ[v].erase(find(ADJ[v].begin(), ADJ[v].end(), u));
        dfs1(v);
        sz[u] += sz[v];
    }
    sort(ADJ[u].begin(), ADJ[u].end(), cmp);
}
void dfs2(int u) {
    cnter++;
    newid[u] = cnter;
    for (int v:ADJ[u]) {
        d[cnter+1] = d[newid[u]] + 1;
        fa[cnter+1] = newid[u];
        dfs2(v);
    }
    lim[newid[u]] = cnter;
}
pair<int, vector<pair<int,int>>> binlift[maxn][lgn];
void dfs3(int u) {
    for (int i=1;i<lgn;i++) {
        if (binlift[u][i-1].first==-1 || binlift[binlift[u][i-1].first][i-1].first==-1) break;
        binlift[u][i].first = binlift[binlift[u][i-1].first][i-1].first;
        binlift[u][i].second = binlift[u][i-1].second;
        for (auto [L, R]:binlift[binlift[u][i-1].first][i-1].second) add(binlift[u][i].second, L, R);
    }
    for (int v:adj[u]) {
        binlift[v][0] = {u, {{u, u}}};
        dfs3(v);
    }
}
vector<pair<int,int>> PATH(int u, int v) {
    if (d[u] > d[v]) swap(u, v);
    vector<pair<int,int>> U = {{u, u}}, V = {{v, v}};
    for (int i=lgn-1;i>=0;i--) if (d[v] - (1<<i) >= d[u]) {
        for (auto [L, R]:binlift[v][i].second) add(V, L, R);
        v = binlift[v][i].first;
    }
    if (u==v) return V;
    for (int i=lgn-1;i>=0;i--) if (binlift[u][i].first != binlift[v][i].first) {
        for (auto [L, R]:binlift[u][i].second) add(U, L, R);
        u = binlift[u][i].first;
        for (auto [L, R]:binlift[v][i].second) add(V, L, R);
        v = binlift[v][i].first;
    }
    add(V, fa[v], fa[v]);
    for (auto [L, R]:U) V.push_back({L, R});
    return V;
}

set<int> seg[maxN];
void build(int id, int l, int r) {
    seg[id].clear();
    if (l==r) return;
    int mid = (l+r)/2;
    build(id*2, l, mid); build(id*2+1, mid+1, r);
}
void update(int id, int l, int r, int &findl, int &findr, int &val, bool addd) {
    if (r<findl || findr<l) return;
    if (findl<=l && r<=findr) {
        if (addd) seg[id].insert(val);
        else seg[id].erase(val);
        return;
    }
    int mid = (l+r)/2;
    update(id*2, l, mid, findl, findr, val, addd);
    update(id*2+1, mid+1, r, findl, findr, val, addd);
}
vector<int> nxt;
void qry(int id, int l, int r, int &target) {
    if (r<target || target<l) return;
    for (int i:seg[id]) nxt.push_back(i);
    if (l==r) return;
    int mid = (l+r)/2;
    qry(id*2, l, mid, target); qry(id*2+1, mid+1, r, target);
}

int S[maxn], T[maxn], vis[maxn];
bool die = false;
set<int> exist;

void dfs4(int &u) {
    int s = a[u].first, t = a[u].second;
    vis[u] = 1;
    vector<pair<int,int>> path = PATH(s, t);
    for (auto [L, R]:path) {
        int cur = L-1;
        while (exist.size() > 1) {
            cur = *exist.upper_bound(cur);
            if (cur > R) break;
            if (cur==s) continue;
            int v = S[cur];
            // cout << u << " " << v << endl;
            if (!vis[v]) dfs4(v);
            else if (vis[v]==1) die = true;
            if (die) return;
        }
    }
    nxt.clear();
    qry(1, 1, n, t);
    for (int v:nxt) if (v!=u) {
        // cout << u << " " << v << endl;
        if (!vis[v]) dfs4(v);
        else if (vis[v]==1) die = true;
        if (die) return;
    }
    for (auto [L, R]:path) update(1, 1, n, L, R, u, 0);
    exist.erase(s);
    vis[u] = 2;
}

void solve() {
    cin >> n;
    for (int i=1;i<=n;i++) sz[i] = 0, adj[i].clear(), ADJ[i].clear();
    cnter = 0;
    for (int i=1;i<=n-1;i++) {
        int u, v;
        cin >> u >> v;
        ADJ[u].push_back(v);
        ADJ[v].push_back(u);
    }
    fa[1] = 0, d[1] = 0;
    dfs1(1); dfs2(1);
    for (int i=1;i<=n;i++) for (int j:ADJ[i]) adj[newid[i]].push_back(newid[j]);
    for (int i=1;i<=n;i++) for (int j=0;j<lgn;j++) binlift[i][j] = {-1, {}};
    dfs3(1);
    exist = {INF};
    build(1, 1, n);
    for (int i=1;i<=n;i++) S[i] = -1, T[i] = -1;
    cin >> m;
    for (int i=1;i<=m;i++) {
        int s, t;
        cin >> s >> t;
        s = newid[s], t = newid[t];
        a[i] = {s, t};
        S[s] = T[t] = i;
        exist.insert(s);
        vector<pair<int,int>> path = PATH(s, t);
        for (auto [L, R]:path) update(1, 1, n, L, R, i, 1);
    }
    for (int i=1;i<=m;i++) vis[i] = 0;
    die = false;
    for (int i=1;i<=m;i++) if (!vis[i]) {
        dfs4(i);
        if (die) break;
    }
    if (die) cout << "No\n";
    else cout << "Yes\n";
}

signed main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int t;
    cin >> t;
    while (t--) solve();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 35 ms 92512 KB Output is correct
2 Correct 33 ms 92496 KB Output is correct
3 Correct 34 ms 92500 KB Output is correct
4 Correct 54 ms 92752 KB Output is correct
5 Correct 66 ms 93268 KB Output is correct
6 Correct 36 ms 92500 KB Output is correct
7 Correct 37 ms 92496 KB Output is correct
8 Correct 50 ms 92764 KB Output is correct
9 Correct 121 ms 97620 KB Output is correct
10 Correct 179 ms 180304 KB Output is correct
11 Correct 48 ms 92752 KB Output is correct
12 Correct 86 ms 93524 KB Output is correct
13 Correct 395 ms 199120 KB Output is correct
14 Correct 328 ms 198920 KB Output is correct
15 Correct 550 ms 217936 KB Output is correct
16 Correct 1312 ms 272012 KB Output is correct
17 Correct 538 ms 230228 KB Output is correct
18 Correct 324 ms 204112 KB Output is correct
19 Correct 448 ms 224336 KB Output is correct
20 Correct 438 ms 224332 KB Output is correct
21 Correct 465 ms 229888 KB Output is correct
22 Correct 231 ms 187992 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 92496 KB Output is correct
2 Correct 35 ms 92496 KB Output is correct
3 Correct 36 ms 92504 KB Output is correct
4 Correct 39 ms 92508 KB Output is correct
5 Correct 51 ms 92644 KB Output is correct
6 Correct 42 ms 92756 KB Output is correct
7 Correct 38 ms 92496 KB Output is correct
8 Correct 38 ms 92496 KB Output is correct
9 Correct 36 ms 92548 KB Output is correct
10 Correct 35 ms 92504 KB Output is correct
11 Correct 35 ms 92508 KB Output is correct
12 Correct 35 ms 92372 KB Output is correct
13 Correct 47 ms 92524 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 92496 KB Output is correct
2 Correct 35 ms 92496 KB Output is correct
3 Correct 36 ms 92504 KB Output is correct
4 Correct 39 ms 92508 KB Output is correct
5 Correct 51 ms 92644 KB Output is correct
6 Correct 42 ms 92756 KB Output is correct
7 Correct 38 ms 92496 KB Output is correct
8 Correct 38 ms 92496 KB Output is correct
9 Correct 36 ms 92548 KB Output is correct
10 Correct 35 ms 92504 KB Output is correct
11 Correct 35 ms 92508 KB Output is correct
12 Correct 35 ms 92372 KB Output is correct
13 Correct 47 ms 92524 KB Output is correct
14 Correct 35 ms 92408 KB Output is correct
15 Correct 45 ms 92320 KB Output is correct
16 Correct 37 ms 92496 KB Output is correct
17 Correct 38 ms 92496 KB Output is correct
18 Correct 38 ms 92508 KB Output is correct
19 Correct 36 ms 92516 KB Output is correct
20 Correct 48 ms 92504 KB Output is correct
21 Correct 40 ms 92508 KB Output is correct
22 Correct 36 ms 92496 KB Output is correct
23 Correct 36 ms 92496 KB Output is correct
24 Correct 35 ms 92504 KB Output is correct
25 Correct 44 ms 92500 KB Output is correct
26 Correct 39 ms 92396 KB Output is correct
27 Correct 36 ms 92504 KB Output is correct
28 Correct 34 ms 92496 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 92496 KB Output is correct
2 Correct 35 ms 92496 KB Output is correct
3 Correct 36 ms 92504 KB Output is correct
4 Correct 39 ms 92508 KB Output is correct
5 Correct 51 ms 92644 KB Output is correct
6 Correct 42 ms 92756 KB Output is correct
7 Correct 38 ms 92496 KB Output is correct
8 Correct 38 ms 92496 KB Output is correct
9 Correct 36 ms 92548 KB Output is correct
10 Correct 35 ms 92504 KB Output is correct
11 Correct 35 ms 92508 KB Output is correct
12 Correct 35 ms 92372 KB Output is correct
13 Correct 47 ms 92524 KB Output is correct
14 Correct 35 ms 92408 KB Output is correct
15 Correct 45 ms 92320 KB Output is correct
16 Correct 37 ms 92496 KB Output is correct
17 Correct 38 ms 92496 KB Output is correct
18 Correct 38 ms 92508 KB Output is correct
19 Correct 36 ms 92516 KB Output is correct
20 Correct 48 ms 92504 KB Output is correct
21 Correct 40 ms 92508 KB Output is correct
22 Correct 36 ms 92496 KB Output is correct
23 Correct 36 ms 92496 KB Output is correct
24 Correct 35 ms 92504 KB Output is correct
25 Correct 44 ms 92500 KB Output is correct
26 Correct 39 ms 92396 KB Output is correct
27 Correct 36 ms 92504 KB Output is correct
28 Correct 34 ms 92496 KB Output is correct
29 Correct 38 ms 92504 KB Output is correct
30 Correct 47 ms 92500 KB Output is correct
31 Correct 37 ms 92492 KB Output is correct
32 Correct 41 ms 92508 KB Output is correct
33 Correct 37 ms 92532 KB Output is correct
34 Correct 40 ms 92508 KB Output is correct
35 Correct 49 ms 92500 KB Output is correct
36 Correct 50 ms 92504 KB Output is correct
37 Runtime error 97 ms 187220 KB Execution killed with signal 11
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 92496 KB Output is correct
2 Correct 35 ms 92496 KB Output is correct
3 Correct 36 ms 92504 KB Output is correct
4 Correct 39 ms 92508 KB Output is correct
5 Correct 51 ms 92644 KB Output is correct
6 Correct 42 ms 92756 KB Output is correct
7 Correct 38 ms 92496 KB Output is correct
8 Correct 38 ms 92496 KB Output is correct
9 Correct 36 ms 92548 KB Output is correct
10 Correct 35 ms 92504 KB Output is correct
11 Correct 35 ms 92508 KB Output is correct
12 Correct 35 ms 92372 KB Output is correct
13 Correct 47 ms 92524 KB Output is correct
14 Correct 35 ms 92408 KB Output is correct
15 Correct 45 ms 92320 KB Output is correct
16 Correct 37 ms 92496 KB Output is correct
17 Correct 38 ms 92496 KB Output is correct
18 Correct 38 ms 92508 KB Output is correct
19 Correct 36 ms 92516 KB Output is correct
20 Correct 48 ms 92504 KB Output is correct
21 Correct 40 ms 92508 KB Output is correct
22 Correct 36 ms 92496 KB Output is correct
23 Correct 36 ms 92496 KB Output is correct
24 Correct 35 ms 92504 KB Output is correct
25 Correct 44 ms 92500 KB Output is correct
26 Correct 39 ms 92396 KB Output is correct
27 Correct 36 ms 92504 KB Output is correct
28 Correct 34 ms 92496 KB Output is correct
29 Correct 38 ms 92504 KB Output is correct
30 Correct 47 ms 92500 KB Output is correct
31 Correct 37 ms 92492 KB Output is correct
32 Correct 41 ms 92508 KB Output is correct
33 Correct 37 ms 92532 KB Output is correct
34 Correct 40 ms 92508 KB Output is correct
35 Correct 49 ms 92500 KB Output is correct
36 Correct 50 ms 92504 KB Output is correct
37 Runtime error 97 ms 187220 KB Execution killed with signal 11
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 34 ms 92500 KB Output is correct
2 Correct 37 ms 92524 KB Output is correct
3 Correct 44 ms 92504 KB Output is correct
4 Correct 41 ms 92500 KB Output is correct
5 Correct 43 ms 92496 KB Output is correct
6 Correct 38 ms 92372 KB Output is correct
7 Correct 38 ms 92496 KB Output is correct
8 Correct 35 ms 92524 KB Output is correct
9 Correct 36 ms 92412 KB Output is correct
10 Correct 43 ms 92500 KB Output is correct
11 Correct 34 ms 92508 KB Output is correct
12 Correct 38 ms 92680 KB Output is correct
13 Correct 75 ms 93020 KB Output is correct
14 Incorrect 117 ms 93412 KB Output isn't correct
15 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 35 ms 92512 KB Output is correct
2 Correct 33 ms 92496 KB Output is correct
3 Correct 34 ms 92500 KB Output is correct
4 Correct 54 ms 92752 KB Output is correct
5 Correct 66 ms 93268 KB Output is correct
6 Correct 36 ms 92500 KB Output is correct
7 Correct 37 ms 92496 KB Output is correct
8 Correct 50 ms 92764 KB Output is correct
9 Correct 121 ms 97620 KB Output is correct
10 Correct 179 ms 180304 KB Output is correct
11 Correct 48 ms 92752 KB Output is correct
12 Correct 86 ms 93524 KB Output is correct
13 Correct 395 ms 199120 KB Output is correct
14 Correct 328 ms 198920 KB Output is correct
15 Correct 550 ms 217936 KB Output is correct
16 Correct 1312 ms 272012 KB Output is correct
17 Correct 538 ms 230228 KB Output is correct
18 Correct 324 ms 204112 KB Output is correct
19 Correct 448 ms 224336 KB Output is correct
20 Correct 438 ms 224332 KB Output is correct
21 Correct 465 ms 229888 KB Output is correct
22 Correct 231 ms 187992 KB Output is correct
23 Correct 48 ms 92496 KB Output is correct
24 Correct 35 ms 92496 KB Output is correct
25 Correct 36 ms 92504 KB Output is correct
26 Correct 39 ms 92508 KB Output is correct
27 Correct 51 ms 92644 KB Output is correct
28 Correct 42 ms 92756 KB Output is correct
29 Correct 38 ms 92496 KB Output is correct
30 Correct 38 ms 92496 KB Output is correct
31 Correct 36 ms 92548 KB Output is correct
32 Correct 35 ms 92504 KB Output is correct
33 Correct 35 ms 92508 KB Output is correct
34 Correct 35 ms 92372 KB Output is correct
35 Correct 47 ms 92524 KB Output is correct
36 Correct 35 ms 92408 KB Output is correct
37 Correct 45 ms 92320 KB Output is correct
38 Correct 37 ms 92496 KB Output is correct
39 Correct 38 ms 92496 KB Output is correct
40 Correct 38 ms 92508 KB Output is correct
41 Correct 36 ms 92516 KB Output is correct
42 Correct 48 ms 92504 KB Output is correct
43 Correct 40 ms 92508 KB Output is correct
44 Correct 36 ms 92496 KB Output is correct
45 Correct 36 ms 92496 KB Output is correct
46 Correct 35 ms 92504 KB Output is correct
47 Correct 44 ms 92500 KB Output is correct
48 Correct 39 ms 92396 KB Output is correct
49 Correct 36 ms 92504 KB Output is correct
50 Correct 34 ms 92496 KB Output is correct
51 Correct 38 ms 92504 KB Output is correct
52 Correct 47 ms 92500 KB Output is correct
53 Correct 37 ms 92492 KB Output is correct
54 Correct 41 ms 92508 KB Output is correct
55 Correct 37 ms 92532 KB Output is correct
56 Correct 40 ms 92508 KB Output is correct
57 Correct 49 ms 92500 KB Output is correct
58 Correct 50 ms 92504 KB Output is correct
59 Runtime error 97 ms 187220 KB Execution killed with signal 11
60 Halted 0 ms 0 KB -