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 <iostream>
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6+5;
int n,m,k;
int arr[MAXN];
int tmp[MAXN];
bool blocked[MAXN];
int sz[MAXN];
vector<int> res;
map<pair<int,int>,int> m2;
vector<int> v1[MAXN];
map<int,int> m1;
int side1;
int hold;
void dfs(int curr,int par){
if(blocked[curr]){
sz[curr] = 1;
}
for(int x:v1[curr]){
if(x!=par){
dfs(x,curr);
if(sz[x]!=hold && sz[x]!=0){
tmp[m2[make_pair(x,curr)]]++;
// cout<<x<<" "<<curr<<" "<<sz[x]<<" "<<hold<<endl;
}
sz[curr]+=sz[x];
}
}
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
v1[x].push_back(y);
v1[y].push_back(x);
m2[make_pair(x,y)] = i;
m2[make_pair(y,x)] = i;
}
for(int i=1;i<=m;i++){
int val;
cin>>val;
for(int j=1;j<=n;j++){
blocked[j] = false;
sz[j] = 0;
}
for(int j=1;j<=val;j++){
int x;
cin>>x;
blocked[x] = true;
}
side1 = val;
hold = val;
dfs(1,1);
}
for(int i=1;i<n;i++){
if(tmp[i]>=k){
res.push_back(i);
}
}
cout<<res.size()<<endl;
for(int x:res){
cout<<x<<endl;
}
}
# | 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... |