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;
const int N = 1e5 + 1;
int n, m, k, cnt;
vector<pair<int, int>> g[N];
int up[N][20], tin[N], tout[N], mars[N];
int t[N];
bool cmp(int u, int v){
return tin[u] < tin[v];
}
void dfs(int nod = 1, int p = 1){
tin[nod] = ++cnt;
up[nod][0] = p;
for(int i = 1; i < 20; i++){
up[nod][i] = up[up[nod][i - 1]][i - 1];
}
for(auto i : g[nod]){
if(i.first != p){
dfs(i.first, nod);
t[i.first] = i.second;
}
}
tout[nod] = ++cnt;
}
bool is_ancestor(int u, int v){
return tin[u] <= tin[v] && tout[u] >= tout[v];
}
int lca(int u, int v){
if(is_ancestor(u, v)) return u;
if(is_ancestor(v, u)) return v;
for(int i = 19; i >= 0; i--){
if(!is_ancestor(up[u][i], v)){
u = up[u][i];
}
}
return up[u][0];
}
void dfs1(int nod = 1, int p = 1){
//cout << nod << " " << p << '\n';
for(auto i : g[nod]){
if(i.first != p){
dfs1(i.first, nod);
mars[nod] += mars[i.first];
}
}
}
int main(){
cin >> n >> m >> k;
for(int i = 1; i < n; i++){
int u, v;
cin >> u >> v;
g[u].push_back({v, i});
g[v].push_back({u, i});
}
dfs();
for(int i = 1; i <= m; i++){
int t;
cin >> t;
vector<int> s(t + 10);
for(int i = 1; i <= t; i++){
cin >> s[i];
}
sort(s.begin() + 1, s.begin() + 1 + t, cmp);
s[t + 1] = s[1];
for(int i = 1; i <= t; i++){
int lc = lca(s[i], s[i + 1]);
mars[s[i]]++;
mars[s[i + 1]]++;
mars[lc]-=2;
}
}
dfs1();
vector<int> sol;
for(int i = 2; i <= n; i++){
if(mars[i] >= 2 * k){
sol.push_back(t[i]);
}
}
cout << sol.size() << '\n';
sort(sol.begin(), sol.end());
for(auto i : sol) cout << i << " ";
}
# | 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... |