제출 #172826

#제출 시각아이디문제언어결과실행 시간메모리
172826rzbtRailway (BOI17_railway)C++14
0 / 100
156 ms24376 KiB
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define MAXN 100005
typedef long long ll;


using namespace std;

vector<pair<int,int> > niz[MAXN];
int predak[MAXN][20],ulaz[MAXN],izlaz[MAXN],dub[MAXN],zbir[MAXN];
int vreme;
vector<int> tg,res;

int n,m,k;

void dfs(int t,int o,int h){
    vreme++;
    ulaz[t]=vreme;
    dub[t]=h;
    predak[t][0]=o;
    for(auto x:niz[t])
        if(x.F!=o)dfs(x.F,t,h+1);
    izlaz[t]=vreme;


}
int lca(int a,int b){

    if(dub[a]<dub[b])swap(a,b);
    //printf("   %d %d\n",a,b);
    for(int i=19;i>=0;i--){
        if(predak[a][i]==0)continue;
        if(dub[predak[a][i]]>=dub[b])a=predak[a][i];
    }
    //printf("   %d %d\n",a,b);
    if(a==b)return a;
    for(int i=19;i>=0;i--){
        if(predak[a][i]!=predak[b][i]){
            a=predak[a][i];
            b=predak[b][i];
        }
    }

    return predak[a][0];
}

bool cmp(int a,int b){
    return ulaz[a]<ulaz[b];
}

void dfs2(int t,int o){

    for(auto x:niz[t]){
        if(x.F==o)continue;
        dfs2(x.F,t);
        if(zbir[x.F]>=k)res.pb(x.S);
        zbir[t]+=zbir[x.F];
    }
    //printf("   %d %d\n",t, zbir[t]);
    return;
}

int main()
{
    scanf("%d %d %d", &n, &m, &k);
    for(int i=1;i<n;i++){
        int t1,t2;
        scanf("%d %d", &t1, &t2);
        niz[t1].pb(mp(t2,i));
        niz[t2].pb(mp(t1,i));
    }
    dfs(1,0,0);
    for(int j=1;j<20;j++){
        for(int i=1;i<=n;i++){
            predak[i][j]=predak[predak[i][j-1]][j-1];
        }
    }
    for(int i=1;i<=m;i++){
        int bt;
        scanf("%d", &bt);
        tg.clear();
        for(int j=0;j<bt;j++){
            int t;
            scanf("%d", &t);
            tg.pb(t);
        }
        sort(all(tg),cmp);
        tg.pb(tg[0]);
        for(int j=0;j<bt;j++){
            //printf("   %d %d    %d\n",tg[j],tg[j+1],lca(tg[j],tg[j+1]));
            zbir[tg[j]]++;
            zbir[lca(tg[j],tg[j+1])]--;
        }
        //for(int i=1;i<=n;i++)printf("%d ",zbir[i]);
        //printf("\n");
    }
    dfs2(1,0);

    printf("%d\n",res.size());
    for(auto x:res)printf("%d ",x);

    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

railway.cpp: In function 'int main()':
railway.cpp:103:29: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type {aka long unsigned int}' [-Wformat=]
     printf("%d\n",res.size());
                   ~~~~~~~~~~^
railway.cpp:69:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d", &n, &m, &k);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
railway.cpp:72:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d", &t1, &t2);
         ~~~~~^~~~~~~~~~~~~~~~~~~
railway.cpp:84:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &bt);
         ~~~~~^~~~~~~~~~~
railway.cpp:88:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d", &t);
             ~~~~~^~~~~~~~~~
#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...