제출 #1276517

#제출 시각아이디문제언어결과실행 시간메모리
1276517WH8Railway (BOI17_railway)C++20
52 / 100
204 ms46608 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pll pair<int, int> #define mp make_pair #define pb push_back #define f first #define s second int n,m,k; vector<int> num(100005), ans(100005, 0); vector<map<int,int>> v(100005); vector<vector<pair<int,int>>> al(100005); vector<vector<int>> here(100005); vector<int> abv; void dfs(int x, int pind){ for(int it:here[x]){ v[x][it]++; ans[x]++; } for(auto [to, ind] : al[x]){ if(ind==pind)continue; dfs(to, ind); // merge into v[x] if(v[to].size() > v[x].size())swap(v[to], v[x]); ans[x]+=ans[to]; for(auto [dep, amt] : v[to]){ v[x][dep]+=amt; if(v[x][dep]>amt){ ans[x]--; } if(v[x][dep]==num[dep]){ ans[x]--; } } } if(ans[x] >= k){ abv.pb(pind); } //~ printf("at %lld, ans is %lld\n", x, ans[x]); //~ for(auto [dep, amt]:v[x]){ //~ printf("(%lld, %lld) ",dep, amt); //~ } //~ cout<<endl; } signed main(){ cin>>n>>m>>k; for(int i=1;i<=n-1;i++){ int a,b;cin>>a>>b; al[a].pb({b,i}); al[b].pb({a,i}); } for(int i=0;i<m;i++){ int si;cin>>si; for(int j=0;j<si;j++){ int ep;cin>>ep; here[ep].pb(i); } num[i]=si; } dfs(1, -1); cout<<abv.size()<<"\n"; sort(abv.begin(),abv.end()); for(auto it:abv){ cout<<it<<" "; } }
#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...