Submission #1307745

#TimeUsernameProblemLanguageResultExecution timeMemory
1307745StefanSebezRailway (BOI17_railway)C++20
100 / 100
113 ms39820 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
#define mp make_pair
const int N=1e5+50,lg=18;
vector<int>E[N];
int n,q,K;
int in[N],tajm,out[N],par[N][lg+1],depth[N];
void DFS1(int u,int p=0){
    in[u]=++tajm;
    par[u][0]=p;depth[u]=depth[p]+1;
    for(int i=1;i<=lg;i++)par[u][i]=par[par[u][i-1]][i-1];
    for(auto i:E[u])if(i!=p)DFS1(i,u);
    out[u]=tajm;
}
int LCA(int u,int v){
    if(depth[u]<depth[v])swap(u,v);
    for(int i=lg;i>=0;i--)if(depth[par[u][i]]>=depth[v])u=par[u][i];if(u==v)return u;
    for(int i=lg;i>=0;i--)if(par[u][i]!=par[v][i])u=par[u][i],v=par[v][i];return par[u][0];
}
int val[N],dp[N];
vector<int>res;
map<pair<int,int>,int>mapa;
void DFS(int u,int p=0){
    dp[u]=val[u];
    for(auto i:E[u])if(i!=p)DFS(i,u),dp[u]+=dp[i];
    if(p!=0&&dp[u]>=2*K)res.pb(mapa[mp(u,p)]);
}
int main(){
    scanf("%i%i%i",&n,&q,&K);
    for(int i=1;i<n;i++){
        int u,v;scanf("%i%i",&u,&v);
        E[u].pb(v),E[v].pb(u);
        mapa[{u,v}]=mapa[{v,u}]=i;
    }
    DFS1(1);
    while(q--){
        int m;scanf("%i",&m);
        int a[m];for(int i=0;i<m;i++)scanf("%i",&a[i]);
        sort(a,a+m,[&](int i,int j){return in[i]<in[j];});
        for(int i=0;i<m;i++){
            int u=a[i],v=a[0];
            if(i<m-1)v=a[i+1];
            int c=LCA(u,v);
            val[u]++,val[v]++;
            val[c]-=2;
        }
    }
    DFS(1);
    sort(res.begin(),res.end());
    printf("%i\n",res.size());
    for(auto i:res)printf("%i ",i);printf("\n");
    return 0;
}

Compilation message (stderr)

railway.cpp: In function 'int main()':
railway.cpp:55:14: warning: format '%i' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wformat=]
   55 |     printf("%i\n",res.size());
      |             ~^    ~~~~~~~~~~
      |              |            |
      |              int          std::vector<int>::size_type {aka long unsigned int}
      |             %li
railway.cpp:34:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |     scanf("%i%i%i",&n,&q,&K);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
railway.cpp:36:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |         int u,v;scanf("%i%i",&u,&v);
      |                 ~~~~~^~~~~~~~~~~~~~
railway.cpp:42:20: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |         int m;scanf("%i",&m);
      |               ~~~~~^~~~~~~~~
railway.cpp:43:43: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   43 |         int a[m];for(int i=0;i<m;i++)scanf("%i",&a[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...