Submission #481080

#TimeUsernameProblemLanguageResultExecution timeMemory
481080DJeniUpRailway (BOI17_railway)C++17
100 / 100
254 ms51788 KiB
#pragma GCC Optimize("O3")
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll>pairll;
typedef pair<ll,pairll>pairlll;
typedef pair<pairll,pairll>pairllll;
typedef long double ld;
typedef pair<ll,string>pairls;

#define INF 1000000000000007
#define MOD 1000000007
#define pb push_back
#define fr first
#define sc second
#define endl '\n'

ll n,m,k,f[100007],t[100007][37],a[100007],b[100007],F,res[100007];

vector<pairll>v[100007];
vector<ll>d[50007];

queue<ll>R;

void S(ll x,ll y){
    F++;
    a[x]=F;
    t[x][0]=y;
    for(int i=1;i<=26;i++){
        t[x][i]=t[t[x][i-1]][i-1];
    }
    for(int i=0;i<v[x].size();i++){
        if(v[x][i].fr!=y)S(v[x][i].fr,x);
    }
    F++;
    b[x]=F;
    return ;
}

ll up(ll x,ll y){
    if(a[x]<a[y] && b[y]<b[x])return x;
    if(a[y]<a[x] && b[x]<b[y])return y;

    for(int i=26;i>=0;i--){
        if((a[t[x][i]]<a[y] && b[y]<b[t[x][i]]) || t[x][i]==0)continue;
        x=t[x][i];
    }
    return t[x][0];
}

bool mcp(ll d1,ll d2){
    return a[d1]<a[d2];
}

ll D(ll x,ll y,ll z){
    res[z]+=f[x];
    for(int i=0;i<v[x].size();i++){
        if(v[x][i].fr!=y)res[z]+=D(v[x][i].fr,x,v[x][i].sc);
    }
    return res[z];
}

int main() {
    
    cin>>n>>m>>k;
    for(int i=1;i<n;i++){
        ll l,r;
        cin>>l>>r;
        v[l].pb({r,i});
        v[r].pb({l,i});
    }
    S(1,0);
    for(int i=1;i<=m;i++){
        ll s;
        cin>>s;
        while(s--){
            ll l;
            cin>>l;
            d[i].pb(l);
        }
        sort(d[i].begin(), d[i].end(),mcp);
        for(int j=0;j<d[i].size();j++){
            f[d[i][j]]++;
            f[up(d[i][j],d[i][(j+1)%d[i].size()])]--;
        }
    }
    D(1,0,0);
    for(int i=1;i<n;i++){
        if(res[i]>=k)R.push(i);
    }
    cout<<R.size()<<endl;
    while(R.size()>0){
        cout<<R.front()<<" ";
        R.pop();
    }
}

Compilation message (stderr)

railway.cpp:1: warning: ignoring '#pragma GCC Optimize' [-Wunknown-pragmas]
    1 | #pragma GCC Optimize("O3")
      | 
railway.cpp: In function 'void S(ll, ll)':
railway.cpp:35:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for(int i=0;i<v[x].size();i++){
      |                 ~^~~~~~~~~~~~
railway.cpp: In function 'll D(ll, ll, ll)':
railway.cpp:60:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |     for(int i=0;i<v[x].size();i++){
      |                 ~^~~~~~~~~~~~
railway.cpp: In function 'int main()':
railway.cpp:85:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |         for(int j=0;j<d[i].size();j++){
      |                     ~^~~~~~~~~~~~
#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...