Submission #785673

# Submission time Handle Problem Language Result Execution time Memory
785673 2023-07-17T12:01:23 Z SlavicG Railway (BOI17_railway) C++17
100 / 100
210 ms 38344 KB
#include "bits/stdc++.h"
using namespace std;
 
#define ll long long
 
#define          all(v)              v.begin(), v.end()
#define         rall(v)              v.rbegin(),v.rend()
 
#define            pb                push_back
#define          sz(a)               (int)a.size()

const int N = 1e5 + 5, K = 20;
vector<int> adj[N];
int jump[N][K], depth[N], tin[N], tt = 0, cnt[N];
void get_parents(int u, int par) {
    jump[u][0] = par;
    tin[u] = tt++;
    for(int v: adj[u]) {
        if(v == par) continue;
        depth[v] = depth[u] + 1;
        get_parents(v, u);
    }
}
int lca(int a, int b) {
    if(depth[a] < depth[b]) swap(a, b);
    for(int i = K - 1; i >= 0; --i) {
        if(depth[jump[a][i]] >= depth[b]) a = jump[a][i];
    }
    if(a == b) return a;
    for(int i = K - 1; i >= 0; --i) {
        if(jump[a][i] != jump[b][i]) {
            a = jump[a][i];
            b = jump[b][i];
        }
    }
    return jump[a][0];
}

void dfs(int u, int par) {
    for(int v: adj[u]) {
        if(v == par) continue;
        dfs(v, u);
        cnt[u] += cnt[v];
    }
}

void solve() {
    int n, m, k; cin >> n >> m >> k;
    map<pair<int, int>, int> mp;
    for(int i = 0; i < n - 1; ++i) {
        int u, v; cin >> u >> v; --u, --v;
        adj[u].pb(v);
        adj[v].pb(u);
        mp[{u, v}] = mp[{v, u}] = i;
    }
    get_parents(0, 0);
    for(int j = 1; j < K; ++j) {
        for(int i = 0; i < n; ++i) {
            jump[i][j] = jump[jump[i][j - 1]][j - 1];
        }
    }

    while(m--) {
        int len; cin >> len;
        vector<int> a(len);
        for(int i = 0; i < len; ++i) {
            cin >> a[i]; --a[i];
        }
        sort(all(a), [&](int i, int j){return tin[i] < tin[j];});
        vector<int> nodes = a;
        for(int i = 0; i + 1 < len; ++i) {
            nodes.pb(lca(a[i], a[i + 1]));
        }
        sort(all(nodes), [&](int i, int j){return tin[i] < tin[j];});
        nodes.erase(unique(all(nodes)), nodes.end());
        stack<int> st;
        st.push(nodes[0]);
        for(int i = 1; i < sz(nodes); ++i) {
            while(lca(st.top(), nodes[i]) != st.top()) st.pop();
            ++cnt[nodes[i]];
            --cnt[st.top()];
            st.push(nodes[i]);
        }
    }

    dfs(0, -1);
    vector<int> v;
    for(int i = 0; i < n; ++i) {
        if(cnt[i] >= k) {
            v.pb(mp[{i, jump[i][0]}]);
        }
    }
    sort(all(v));
    cout << sz(v) << "\n";
    for(auto x: v) cout << x + 1 << " ";

}   
 
int32_t main() {
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t = 1;
    //cin >> t;
    while(t--) {
        solve();
    }
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2644 KB Output is correct
2 Correct 9 ms 5252 KB Output is correct
3 Correct 9 ms 5252 KB Output is correct
4 Correct 1 ms 2680 KB Output is correct
5 Correct 2 ms 2644 KB Output is correct
6 Correct 9 ms 5716 KB Output is correct
7 Correct 9 ms 5288 KB Output is correct
8 Correct 8 ms 5196 KB Output is correct
9 Correct 8 ms 5252 KB Output is correct
10 Correct 2 ms 2644 KB Output is correct
11 Correct 2 ms 2644 KB Output is correct
12 Correct 1 ms 2644 KB Output is correct
13 Correct 1 ms 2672 KB Output is correct
14 Correct 1 ms 2644 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2644 KB Output is correct
2 Correct 9 ms 5252 KB Output is correct
3 Correct 9 ms 5252 KB Output is correct
4 Correct 1 ms 2680 KB Output is correct
5 Correct 2 ms 2644 KB Output is correct
6 Correct 9 ms 5716 KB Output is correct
7 Correct 9 ms 5288 KB Output is correct
8 Correct 8 ms 5196 KB Output is correct
9 Correct 8 ms 5252 KB Output is correct
10 Correct 2 ms 2644 KB Output is correct
11 Correct 2 ms 2644 KB Output is correct
12 Correct 1 ms 2644 KB Output is correct
13 Correct 1 ms 2672 KB Output is correct
14 Correct 1 ms 2644 KB Output is correct
15 Correct 54 ms 5608 KB Output is correct
16 Correct 55 ms 5616 KB Output is correct
17 Correct 54 ms 5604 KB Output is correct
18 Correct 9 ms 5716 KB Output is correct
19 Correct 9 ms 5280 KB Output is correct
20 Correct 52 ms 5728 KB Output is correct
21 Correct 54 ms 5696 KB Output is correct
22 Correct 2 ms 2644 KB Output is correct
23 Correct 10 ms 5252 KB Output is correct
24 Correct 10 ms 5152 KB Output is correct
25 Correct 2 ms 2644 KB Output is correct
26 Correct 2 ms 2672 KB Output is correct
27 Correct 9 ms 5716 KB Output is correct
28 Correct 9 ms 5240 KB Output is correct
29 Correct 8 ms 5180 KB Output is correct
30 Correct 9 ms 5204 KB Output is correct
31 Correct 2 ms 2644 KB Output is correct
32 Correct 2 ms 2644 KB Output is correct
33 Correct 2 ms 2644 KB Output is correct
34 Correct 1 ms 2676 KB Output is correct
35 Correct 2 ms 2644 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 114 ms 37820 KB Output is correct
2 Correct 1 ms 2644 KB Output is correct
3 Correct 110 ms 37488 KB Output is correct
4 Correct 100 ms 36948 KB Output is correct
5 Correct 123 ms 37820 KB Output is correct
6 Correct 132 ms 38156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 122 ms 33004 KB Output is correct
2 Correct 175 ms 29600 KB Output is correct
3 Correct 157 ms 29208 KB Output is correct
4 Correct 161 ms 29208 KB Output is correct
5 Correct 159 ms 29184 KB Output is correct
6 Correct 139 ms 33204 KB Output is correct
7 Correct 118 ms 33124 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 122 ms 33004 KB Output is correct
2 Correct 175 ms 29600 KB Output is correct
3 Correct 157 ms 29208 KB Output is correct
4 Correct 161 ms 29208 KB Output is correct
5 Correct 159 ms 29184 KB Output is correct
6 Correct 139 ms 33204 KB Output is correct
7 Correct 118 ms 33124 KB Output is correct
8 Correct 162 ms 33220 KB Output is correct
9 Correct 153 ms 33148 KB Output is correct
10 Correct 130 ms 37888 KB Output is correct
11 Correct 124 ms 37828 KB Output is correct
12 Correct 122 ms 28984 KB Output is correct
13 Correct 132 ms 29112 KB Output is correct
14 Correct 190 ms 29072 KB Output is correct
15 Correct 171 ms 29012 KB Output is correct
16 Correct 157 ms 29204 KB Output is correct
17 Correct 174 ms 29208 KB Output is correct
18 Correct 149 ms 29204 KB Output is correct
19 Correct 145 ms 29580 KB Output is correct
20 Correct 125 ms 33452 KB Output is correct
21 Correct 134 ms 33508 KB Output is correct
22 Correct 126 ms 33388 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2644 KB Output is correct
2 Correct 9 ms 5252 KB Output is correct
3 Correct 9 ms 5252 KB Output is correct
4 Correct 1 ms 2680 KB Output is correct
5 Correct 2 ms 2644 KB Output is correct
6 Correct 9 ms 5716 KB Output is correct
7 Correct 9 ms 5288 KB Output is correct
8 Correct 8 ms 5196 KB Output is correct
9 Correct 8 ms 5252 KB Output is correct
10 Correct 2 ms 2644 KB Output is correct
11 Correct 2 ms 2644 KB Output is correct
12 Correct 1 ms 2644 KB Output is correct
13 Correct 1 ms 2672 KB Output is correct
14 Correct 1 ms 2644 KB Output is correct
15 Correct 54 ms 5608 KB Output is correct
16 Correct 55 ms 5616 KB Output is correct
17 Correct 54 ms 5604 KB Output is correct
18 Correct 9 ms 5716 KB Output is correct
19 Correct 9 ms 5280 KB Output is correct
20 Correct 52 ms 5728 KB Output is correct
21 Correct 54 ms 5696 KB Output is correct
22 Correct 2 ms 2644 KB Output is correct
23 Correct 10 ms 5252 KB Output is correct
24 Correct 10 ms 5152 KB Output is correct
25 Correct 2 ms 2644 KB Output is correct
26 Correct 2 ms 2672 KB Output is correct
27 Correct 9 ms 5716 KB Output is correct
28 Correct 9 ms 5240 KB Output is correct
29 Correct 8 ms 5180 KB Output is correct
30 Correct 9 ms 5204 KB Output is correct
31 Correct 2 ms 2644 KB Output is correct
32 Correct 2 ms 2644 KB Output is correct
33 Correct 2 ms 2644 KB Output is correct
34 Correct 1 ms 2676 KB Output is correct
35 Correct 2 ms 2644 KB Output is correct
36 Correct 114 ms 37820 KB Output is correct
37 Correct 1 ms 2644 KB Output is correct
38 Correct 110 ms 37488 KB Output is correct
39 Correct 100 ms 36948 KB Output is correct
40 Correct 123 ms 37820 KB Output is correct
41 Correct 132 ms 38156 KB Output is correct
42 Correct 122 ms 33004 KB Output is correct
43 Correct 175 ms 29600 KB Output is correct
44 Correct 157 ms 29208 KB Output is correct
45 Correct 161 ms 29208 KB Output is correct
46 Correct 159 ms 29184 KB Output is correct
47 Correct 139 ms 33204 KB Output is correct
48 Correct 118 ms 33124 KB Output is correct
49 Correct 162 ms 33220 KB Output is correct
50 Correct 153 ms 33148 KB Output is correct
51 Correct 130 ms 37888 KB Output is correct
52 Correct 124 ms 37828 KB Output is correct
53 Correct 122 ms 28984 KB Output is correct
54 Correct 132 ms 29112 KB Output is correct
55 Correct 190 ms 29072 KB Output is correct
56 Correct 171 ms 29012 KB Output is correct
57 Correct 157 ms 29204 KB Output is correct
58 Correct 174 ms 29208 KB Output is correct
59 Correct 149 ms 29204 KB Output is correct
60 Correct 145 ms 29580 KB Output is correct
61 Correct 125 ms 33452 KB Output is correct
62 Correct 134 ms 33508 KB Output is correct
63 Correct 126 ms 33388 KB Output is correct
64 Correct 133 ms 33352 KB Output is correct
65 Correct 155 ms 29220 KB Output is correct
66 Correct 210 ms 29084 KB Output is correct
67 Correct 177 ms 29064 KB Output is correct
68 Correct 124 ms 28996 KB Output is correct
69 Correct 155 ms 28948 KB Output is correct
70 Correct 130 ms 33644 KB Output is correct
71 Correct 145 ms 33008 KB Output is correct
72 Correct 2 ms 2644 KB Output is correct
73 Correct 9 ms 5204 KB Output is correct
74 Correct 10 ms 5204 KB Output is correct
75 Correct 1 ms 2676 KB Output is correct
76 Correct 1 ms 2644 KB Output is correct
77 Correct 10 ms 5624 KB Output is correct
78 Correct 9 ms 5360 KB Output is correct
79 Correct 7 ms 5204 KB Output is correct
80 Correct 8 ms 5204 KB Output is correct
81 Correct 2 ms 2644 KB Output is correct
82 Correct 1 ms 2644 KB Output is correct
83 Correct 2 ms 2644 KB Output is correct
84 Correct 1 ms 2672 KB Output is correct
85 Correct 2 ms 2644 KB Output is correct
86 Correct 56 ms 5608 KB Output is correct
87 Correct 55 ms 5660 KB Output is correct
88 Correct 54 ms 5608 KB Output is correct
89 Correct 9 ms 5588 KB Output is correct
90 Correct 9 ms 5332 KB Output is correct
91 Correct 51 ms 5800 KB Output is correct
92 Correct 54 ms 5696 KB Output is correct
93 Correct 1 ms 2644 KB Output is correct
94 Correct 126 ms 37768 KB Output is correct
95 Correct 113 ms 37484 KB Output is correct
96 Correct 105 ms 36884 KB Output is correct
97 Correct 130 ms 37820 KB Output is correct
98 Correct 132 ms 38344 KB Output is correct
99 Correct 150 ms 29160 KB Output is correct
100 Correct 147 ms 29132 KB Output is correct
101 Correct 148 ms 29116 KB Output is correct
102 Correct 179 ms 29536 KB Output is correct
103 Correct 120 ms 33080 KB Output is correct
104 Correct 122 ms 33496 KB Output is correct
105 Correct 117 ms 33092 KB Output is correct
106 Correct 165 ms 33284 KB Output is correct
107 Correct 143 ms 33084 KB Output is correct
108 Correct 124 ms 37900 KB Output is correct
109 Correct 123 ms 37896 KB Output is correct
110 Correct 125 ms 29208 KB Output is correct
111 Correct 121 ms 29104 KB Output is correct
112 Correct 177 ms 29076 KB Output is correct
113 Correct 177 ms 29064 KB Output is correct