Submission #48433

#TimeUsernameProblemLanguageResultExecution timeMemory
48433PajarajaNetwork (BOI15_net)C++17
0 / 100
17 ms18568 KiB
#include <bits/stdc++.h>
using namespace std;
int cnt,nes;
vector<int> g[200007],d[200007];
vector<bool> v[200007];
int k[200007];
void dfs(int s,int f)
{
    if(g[s].size()==1)
    {
        d[f].push_back(s);
        v[f].push_back(false);
        k[f]++;
        return;
    }
    for(int i=0;i<g[s].size();i++) if(g[s][i]!=f) dfs(g[s][i],s);
    if(f!=0)
    {
        for(int i=0;i<d[s].size()-2;i+=(i%2==0?1:3))
        {
            if(k[s]<=2) break;
            printf("%d %d\n",d[s][i],d[s][i+2]);
            v[s][i]=true;
            v[s][i+2]=true;
            k[s]-=2;
        }
        for(int i=0;i<d[s].size();i++) if(!v[s][i])
        {
            d[f].push_back(d[s][i]);
            v[f].push_back(false);
            k[f]++;
        }
    }
    else
    {
        if(k[s]<3) printf("%d %d\n",d[s][0],d[s][1]);
        else
        {
            if(k[s]%2==1) printf("%d %d\n",d[s][k[s]-1],s);
            int a=k[s]/2;
            for(int i=0;i<k[s]/2;i++) printf("%d %d\n",d[s][i],d[s][i+a]);
        }
    }
}
int main()
{
    int n,v1,v2,l=0;
    nes=0;
    fill(k,k+200007,0);
    scanf("%d",&n);
    for(int i=0;i<n-1;i++)
    {
        scanf("%d%d",&v1,&v2);
        g[v1].push_back(v2);
        g[v2].push_back(v1);
    }
    if(n==2)
    {
        printf("1\n1 2");
        return 0;
    }
    if(n==1)
    {
        printf("1\n1 1");
        return 0;
    }
    for(int i=1;i<=n;i++) if(g[i].size()==1) l++;
    printf("%d\n",(l+1)/2);
    for(int i=1;i<=n;i++) if(g[i].size()>1)
    {
        dfs(i,0);
        return 0;
    }
    return 0;
}

Compilation message (stderr)

net.cpp: In function 'void dfs(int, int)':
net.cpp:16:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<g[s].size();i++) if(g[s][i]!=f) dfs(g[s][i],s);
                 ~^~~~~~~~~~~~
net.cpp:19:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<d[s].size()-2;i+=(i%2==0?1:3))
                     ~^~~~~~~~~~~~~~
net.cpp:27:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<d[s].size();i++) if(!v[s][i])
                     ~^~~~~~~~~~~~
net.cpp: In function 'int main()':
net.cpp:50:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
     ~~~~~^~~~~~~~~
net.cpp:53:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&v1,&v2);
         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...