#include <bits/stdc++.h>
using namespace std;
#define sz(v) (int)v.size()
#define fi first
#define sc second
const int MAXN = 1e5+5;
vector<int> adj[MAXN], id[MAXN];
int pai[MAXN], pid[MAXN], tin[MAXN], tout[MAXN], bit[MAXN], n , t;
map<int,int> mp[MAXN];
void update(int i, int x){
for(; i <= n; i += i&-i)
bit[i] += x;
}
int query(int i){
if(i <= 0)return 0;
int ans = 0;
for(; i > 0; i-= i&-i)
ans += bit[i];
return ans;
}
void merge(int p , int f){
if(sz(mp[p]) > sz(mp[f])){
for(auto it : mp[f]){
if(mp[p].find(it.fi) == mp[p].end()) mp[p][it.fi] = it.sc;
else{
update( tin[it.sc], 1);
update( tin[mp[p][it.fi]], 1);
update( tin[p] , -2);
mp[p][it.fi] = p;
}
}
}
else{
for(auto it : mp[p]){
if(mp[f].find(it.fi) == mp[f].end()) mp[f][it.fi] = it.sc;
else{
update( tin[it.sc], 1);
update( tin[mp[f][it.fi]], 1);
update( tin[p] , -2);
mp[f][it.fi] = p;
}
}
swap(mp[f],mp[p]);
}
mp[f].clear();
}
void dfs(int s){
for(int i = 0; i < sz(adj[s]); i++){
int viz = adj[s][i];
if(viz != pai[s]){
dfs(viz);
merge(s,viz);
}
}
}
void dfsIni(int s){
t++; tin[s] = t;
for(int i = 0; i < sz(adj[s]); i++){
int viz = adj[s][i];
if(viz != pai[s]){
pai[viz] = s;
pid[viz] = id[s][i];
dfsIni(viz);
}
}
tout[s] = t;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int m,k; cin>>n>>m>>k;
for(int i = 1; i < n; i++){
int a,b; cin>>a>>b;
adj[a].push_back(b); id[a].push_back(i);
adj[b].push_back(a); id[b].push_back(i);
}
for(int i = 1; i <= m; i++){
int s; cin>>s;
for(int j = 1; j <= s; j++){
int v; cin>>v;
mp[v][i] = v;
}
}
dfsIni(1);
dfs(1);
vector<int> ans;
for(int i = 2; i <= n; i++)
if(query(tout[i])-query(tin[i]-1) >= k)ans.push_back(pid[i]);
cout<<sz(ans)<<"\n";
for(auto it : ans)cout<<it<<" ";
cout<<"\n";
}
# | 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... |