Submission #213590

#TimeUsernameProblemLanguageResultExecution timeMemory
213590MKopchevRailway (BOI17_railway)C++14
23 / 100
1100 ms15096 KiB
#include<bits/stdc++.h>
using namespace std;
const int nmax=1e5+42,BIG=/*200*/1;
int n,m,k;
pair<int,int> edges[nmax];

vector<int> adj[nmax];

int SZ,want[nmax];

int in[nmax];

int current[nmax];

void dfs(int node,int parent)
{
    for(auto k:adj[node])
        if(k!=parent)
        {
            dfs(k,node);
            current[node]+=current[k];
        }
}

bool proper(int SZ_a,int SZ_b)
{
    if(SZ_a==SZ&&SZ_b==SZ)return 0;
    if(SZ_a==0||SZ_b==0)return 0;
    return 1;
}
void add()
{
    scanf("%i",&SZ);
    for(int i=1;i<=SZ;i++)scanf("%i",&want[i]);

    if(SZ<BIG)
    {
        return;
    }

    for(int i=1;i<=SZ;i++)current[want[i]]=1;

    dfs(1,0);

    //for(int i=1;i<=n;i++)cout<<current[i]<<" ";cout<<endl;

    for(int i=1;i<n;i++)
        if(proper(current[edges[i].first],current[edges[i].second]))
        {
            //cout<<"add "<<edges[i].first<<" "<<edges[i].second<<endl;
            in[i]++;
        }

    for(int i=1;i<=n;i++)current[i]=0;
}
int main()
{
    scanf("%i%i%i",&n,&m,&k);

    for(int i=1;i<n;i++)
    {
        scanf("%i%i",&edges[i].first,&edges[i].second);

        adj[edges[i].first].push_back(edges[i].second);
        adj[edges[i].second].push_back(edges[i].first);
    }
    for(int i=1;i<=m;i++)
        add();

    vector<int> output={};
    for(int i=1;i<n;i++)
        if(in[i]>=k)output.push_back(i);

    printf("%i\n",output.size());
    for(int i=0;i<output.size();i++)
    {
        printf("%i",output[i]);
        if(i==output.size()-1)printf("\n");
        else printf(" ");
    }
    return 0;
}

Compilation message (stderr)

railway.cpp: In function 'int main()':
railway.cpp:74:32: warning: format '%i' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type {aka long unsigned int}' [-Wformat=]
     printf("%i\n",output.size());
                   ~~~~~~~~~~~~~^
railway.cpp:75:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<output.size();i++)
                 ~^~~~~~~~~~~~~~
railway.cpp:78:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(i==output.size()-1)printf("\n");
            ~^~~~~~~~~~~~~~~~~
railway.cpp: In function 'void add()':
railway.cpp:33:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i",&SZ);
     ~~~~~^~~~~~~~~~
railway.cpp:34:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(int i=1;i<=SZ;i++)scanf("%i",&want[i]);
                           ~~~~~^~~~~~~~~~~~~~~
railway.cpp: In function 'int main()':
railway.cpp:58:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i%i%i",&n,&m,&k);
     ~~~~~^~~~~~~~~~~~~~~~~~~
railway.cpp:62:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%i%i",&edges[i].first,&edges[i].second);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...