제출 #714665

#제출 시각아이디문제언어결과실행 시간메모리
714665ajab_01Railway (BOI17_railway)C++17
0 / 100
129 ms33704 KiB
#include<bits/stdc++.h> using namespace std; const int N = 1e5 + 5; vector<pair<int , int> > g[N]; set<pair<int , int> > st[N]; vector<int> ans; int sz[N] , n , m , k; void dfs(int v , int par , int num){ for(auto i : g[v]){ int u = i.first , w = i.second; if(u == par) continue; dfs(u , v , w); if(st[v].size() < st[u].size()) swap(st[v] , st[u]); for(auto &p : st[u]){ auto it = st[v].lower_bound({p.first , -1}); if(it == st[v].end()){ st[v].insert(p); continue; } pair<int , int> pp = *it; if(pp.first == p.first){ st[v].erase(pp); if(p.second + pp.second != sz[p.first]) st[v].insert({p.first , p.second + pp.second}); } else{ st[v].insert(p); } } st[u].clear(); } if((int)st[v].size() >= k) ans.push_back(num); } int main(){ ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> n >> m >> k; for(int i = 1 ; i <= n - 1 ; i++){ int u , v; cin >> u >> v; g[u].push_back({v , i}); g[v].push_back({u , i}); } for(int i = 1 ; i <= m ; i++){ int s; cin >> s; sz[i] = s; for(int j = 0 ; j < s ; j++){ int x; cin >> x; if(s == 1) continue; st[x].insert({i , 1}); } } dfs(1 , 0 , 0); cout << (int)ans.size() << '\n'; for(int i : ans) cout << i << ' '; cout << '\n'; 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...