Submission #1156145

#TimeUsernameProblemLanguageResultExecution timeMemory
1156145k12_khoiRailway (BOI17_railway)C++17
100 / 100
201 ms45768 KiB
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define X first
#define Y second
const int N=1e5+5;
int n,q,k,x,y,p[N][22],m,t,H[N]; vector <pii> adj[N]; vector <int> del[N],ve; set <int> se[N];
void dfs(int u,int par)
{
    for (pii v:adj[u])
    if (v.X!=par)
    {
        H[v.X]=H[u]+1;
        p[v.X][0]=u;
        dfs(v.X,u);
    }
}
int lca(int a,int b)
{
    if (H[a]<H[b]) swap(a,b);
    for (int j=20;j>=0;j--)
    if (H[p[a][j]]>=H[b])
    {
        a=p[a][j];
    }
    if (a==b) return a;
    for (int j=20;j>=0;j--)
    if (p[a][j]!=p[b][j])
    {
        a=p[a][j];
        b=p[b][j];
    }
    return p[a][0];
}
void calc(int u,int par)
{
    for (pii v:adj[u])
    if (v.X!=par)
    {
        calc(v.X,u);
        if (se[v.X].size()>=k) ve.push_back(v.Y);
        if (se[v.X].size()>se[u].size()) swap(se[v.X],se[u]);
        for (int i:se[v.X])
        se[u].insert(i);
    }
    for (int v:del[u])
    se[u].erase(se[u].find(v));
}
int main()
{
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL); cout.tie(NULL);
    cin >> n >> q >> k;
    for (int i=1;i<=n-1;i++)
    {
        cin >> x >> y;
        adj[x].push_back(make_pair(y,i));
        adj[y].push_back(make_pair(x,i));
    }
    H[1]=1;
    dfs(1,-1);
    for (int j=1;j<=20;j++)
    for (int i=1;i<=n;i++)
    p[i][j]=p[p[i][j-1]][j-1];
    for (int i=1;i<=q;i++)
    {
        cin >> m;
        t=n+1;
        for (int j=1;j<=m;j++)
        {
            cin >> x;
            se[x].insert(i);
            if (t==n+1) t=x;
            else t=lca(t,x);
        }
        del[t].push_back(i);
    }
    calc(1,-1);
    sort(ve.begin(),ve.end());
    cout << ve.size() << '\n';
    for (int i=0;i<ve.size();i++)
    cout << ve[i] << ' ';
}
#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...