Submission #344312

#TimeUsernameProblemLanguageResultExecution timeMemory
344312egekabasRailway (BOI17_railway)C++14
100 / 100
248 ms42220 KiB
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pull;
typedef pair<int, int> pii;
typedef pair<ld, ld> pld;
int n, m, k;
vector<pii> g[100009];
vector<int> s[100009];

int totcnt[100009];
struct node{
    map<int, int> cnt;
    int all = 0;
};
node nd[100009];

void merge(node &a, node &b){
    if(b.cnt.size() > a.cnt.size())
        swap(a, b);
    for(auto u : b.cnt){
        assert(u.ss);
        a.cnt[u.ff] += u.ss;
        if(a.cnt[u.ff] == totcnt[u.ff])
            a.all++;
    }
}
vector<int> ans;
void dfs(int v, int prt){
    for(auto u : s[v])
        nd[v].cnt[u]++;
    for(auto u : nd[v].cnt)
        if(u.ss == totcnt[u.ff])
            nd[v].all++;
    for(auto u : g[v]){
        if(u.ss == prt) continue;
        dfs(u.ff, u.ss);
        merge(nd[v], nd[u.ff]);
    }
    //cout << v << ' ' << prt << ' ' << nd[v].cnt.size() << '\n';
    if((int)nd[v].cnt.size()-nd[v].all >= k && prt)
        ans.pb(prt);
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);

    cin >> n >> m >> k;
    for(int i = 1; i < n; ++i){
        int x, y;
        cin >> x >> y;
        g[x].pb({y, i});
        g[y].pb({x, i});
    }
    for(int i = 0; i < m; ++i){
        int num;
        cin >> num;
        totcnt[i] = num;
        while(num--){
            int tmp;
            cin >> tmp;
            s[tmp].pb(i);
        }
    }
    dfs(1, 0);
    cout << ans.size() << '\n';
    sort(all(ans));
    for(auto u : ans)
        cout << u << ' ';
}
#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...