This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int , int> II;
const int N = 1e5 + 3;
const ll MOD = 1e9 + 7;
const ll INF = 1e9;
int n, m, k, f[N][20], depth[N];
vector<int> g[N], ans, anc[N];
set<int> S[N];
II ed[N];
void dfs(int u, int p){
depth[u] = depth[p] + 1;
f[u][0] = p;
for(int i = 1; i < 20; i ++) f[u][i] = f[f[u][i - 1]][i - 1];
for(int id : g[u]){
int v = ed[id].first + ed[id].second - u;
if(v == p) continue;
dfs(v, u);
}
}
int lca(int u, int v){
if(depth[u] < depth[v]) swap(u, v);
for(int i = 19; i >= 0; i --){
if(depth[f[u][i]] >= depth[v]) u = f[u][i];
}
if(u == v) return u;
for(int i = 19; i >= 0; i --){
if(f[u][i] != f[v][i]) u = f[u][i], v = f[v][i];
}
return f[u][0];
}
void process(int u, int id){
for(int i : g[u]){
if(i == id) continue;
int v = ed[i].first + ed[i].second - u;
process(v , i);
if(S[v].size() > S[u].size()) swap(S[u], S[v]);
for(auto x : S[v]) S[u].insert(x);
}
for(auto x : anc[u]) S[u].erase(x);
if(S[u].size() >= k) ans.push_back(id);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> k;
for(int i = 1; i < n; i ++){
int u, v;
cin >> u >> v;
g[u].push_back(i);
g[v].push_back(i);
ed[i] = II(u, v);
}
dfs(1, 0);
for(int i = 1; i <= m; i ++){
int s, LCA = 0;
cin >> s >> LCA;
S[LCA].insert(i);
for(int j = 2; j <= s; j ++){
int k;
cin >> k;
LCA = lca(LCA, k);
S[k].insert(i);
}
anc[LCA].push_back(i);
}
process(1, 0);
cout << ans.size() << endl;
sort(ans.begin(), ans.end());
for(auto x : ans) cout << x << " ";
return 0;
}
Compilation message (stderr)
railway.cpp: In function 'void process(int, int)':
railway.cpp:46:23: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
46 | if(S[u].size() >= k) ans.push_back(id);
| ~~~~~~~~~~~~^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |