Submission #1214391

#TimeUsernameProblemLanguageResultExecution timeMemory
1214391WarinchaiRailway (BOI17_railway)C++20
100 / 100
176 ms27324 KiB
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>>adj[200005];
int lv[200005];
int pa[20][100005];
int sum[100005];
int in[100005];
int cur=0;
int n,m,k;
vector<int>ans;

void dfs(int u,int p){
    in[u]=++cur;
    pa[0][u]=p;
    lv[u]=lv[p]+1;
    for(int i=1;i<20;i++)pa[i][u]=pa[i-1][pa[i-1][u]];
    for(auto [x,id]:adj[u])if(x!=p){
        dfs(x,u);
    }
}

int lca(int a,int b){
    if(lv[a]<lv[b])swap(a,b);
    for(int i=19;i>=0;i--)if(lv[pa[i][a]]>=lv[b])a=pa[i][a];
    if(a==b)return a;
    for(int i=19;i>=0;i--)if(pa[i][a]!=pa[i][b])a=pa[i][a],b=pa[i][b];
    return pa[0][a];
}

void efs(int u,int p,int id){
    for(auto [x,id]:adj[u])if(x!=p){
        efs(x,u,id);
        sum[u]+=sum[x];
    }
    if(sum[u]>=k)ans.push_back(id);
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>m>>k;
    vector<pair<int,int>>edge;
    for(int i=0;i<n-1;i++){
        int a,b;cin>>a>>b;
        adj[a].push_back({b,i});
        adj[b].push_back({a,i});
        edge.push_back({a,b});
    }
    dfs(1,0);
    for(int i=0;i<m;i++){
        int s;cin>>s;
        vector<pair<int,int>>v;
        for(int j=0;j<s;j++){
            int x;cin>>x;
            v.push_back({in[x],x});
        }
        sort(v.begin(),v.end());
        for(int i=0;i<v.size();i++){
            int x=v[i].second;
            int y=v[(i+1)%v.size()].second;
            int z=lca(x,y);
            sum[z]--;
            sum[x]++;
        }
    }
    efs(1,0,0);
    cout<<ans.size()<<"\n";
    sort(ans.begin(),ans.end());
    for(auto x:ans)cout<<x+1<<" ";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...