#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvl = vector<vll>;
using pll = pair<ll,ll>;
using vpl = vector<pll>;
using vvp = vector<vpl>;
#define f first
#define s second
#define pb push_back
#define all(v) v.begin(),v.end()
vll ed, sz;
vpl ord;
vvp g;
void dfs(ll cr, ll pr){
ord.pb({cr, -1});
for(pll i:g[cr]){
if(i.f!=pr){
ord.back() = {cr, i.s};
dfs(i.f,cr);
}
}
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(NULL);
ll n, m, k, a ,b, s;
cin >> n >> m >> k;
g = vvp(n);
for(ll i = 0; i < n-1; ++i){
cin >> a >> b;
a--;b--;
g[a].pb({b,i});
g[b].pb({a,i});
}
ll ms=0;
for(ll i = 0; i < n; ++i){if(g[i].size()==1)ms=i;}
dfs(ms, ms);
vll pl(n);
ed = vll(n-1);
for(ll i = 0; i < n; ++i)pl[ord[i].f]=i;
vll ac(n-1);
for(ll i = 0; i < m; ++i){
ll mn = 1e9, mx = 0;
cin >> s;
while(s--){
cin >> a;a--;
mx = max(mx, pl[a]);
mn = min(mn, pl[a]);
}
ac[mn]++;
ac[mx]--;
}
for(ll i = 0; i < n; ++i){
if(i>0)ac[i]+=ac[i-1];
ed[ord[i].s]=ac[i];
}
vll ans;
for(ll i = 0; i < n-1; ++i){
if(ed[i]>=k)ans.pb(i+1);
}
cout << ans.size() << "\n";
for(ll i:ans)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... |