제출 #695207

#제출 시각아이디문제언어결과실행 시간메모리
695207AbitoRailway (BOI17_railway)C++14
0 / 100
190 ms35312 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define F first #define S second #define int long long #define ep insert const int N=1e5+5; int n,m,k; int dep[N],cur=1,f[N],euler[2*N],lg[2*N]; bool vis[N]; pair<int,int> e[N],st[25][N]; vector<int> s[N],adj[N]; map<pair<int,int>,int> idx; void dfs(int node,int depc){ dep[node]=depc; vis[node]=true; f[node]=cur; euler[cur]=node; cur++; for (auto u:adj[node]){ if (vis[u]) continue; dfs(u,depc+1); euler[cur]=node; cur++; }return; } /*void build(){ for (int i=1;i<cur;i++) st[0][i]={dep[euler[i]],euler[i]}; for (int i=1;i<25;i++){ for (int j=1;j+(1<<i)<=cur;j++){ st[i][j]=min(st[i-1][j],st[i-1][j+(1<<(i-1))]); } }return; } int lca(int l,int r){ int i=lg[r-l+1]; pair<int,int> ans=min(st[i][l],st[i][r-(1<<i)+1]); return ans.S; }*/ int32_t main(){ cin>>n>>m>>k; for (int i=2;i<2*N;i++) lg[i]=lg[i/2]+1; for (int i=1;i<n;i++){ cin>>e[i].F>>e[i].S; adj[e[i].F].pb(e[i].S); adj[e[i].S].pb(e[i].F); idx[e[i]]=i; swap(e[i].F,e[i].S); idx[e[i]]=i; }dfs(1,0); for (int i=1;i<=m;i++){ int x;cin>>x; for (int j=0;j<x;j++){ int y;cin>>y; s[i].pb(y); } } set<int> ans; for (int i=1;i<=k;i++){ int x=max(f[s[i][0]],f[s[i][1]]); ans.ep(idx[{euler[x],euler[x-1]}]); }cout<<ans.size()<<endl; for (auto u:ans) cout<<u<<' '; cout<<endl; return 0; }
#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...