zoukankan      html  css  js  c++  java
  • 2020牛客暑期多校训练营(第二场)C

     

     

    思路:

     用类似于DFS序的方法将每个叶子节点编号,求出叶子结点个数ans,链的条数就是ans/2向上取整,考虑到每一条边都要被链覆盖,所以第i个叶子节点需要和第ans/2+i个叶子节点相匹配

    #include<iostream>
    #include<stdio.h>
    #include<vector>
    using namespace std;
    const int maxn = 2e6+5;
    int n,u,v,ans,a[maxn];
    vector<int> vec[maxn];
    void dfs(int x,int fa){
        if(vec[x].size()==1) 
            a[++ans]=x;
        for(int i=0;i<vec[x].size();i++){
            int y = vec[x][i];
            if(y==fa) continue;
            dfs(y,x);
        }
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<n;i++){
            scanf("%d%d",&u,&v);
            vec[u].push_back(v);
            vec[v].push_back(u);
        }
        if(n==2)
            printf("1
    %d %d
    ",u,v);
        for(int i=1;i<=n;i++){
            if(vec[i].size()>1){
                dfs(i,-1);
                break;
            }
        }
        printf("%d
    ",(ans+1)/2);
        for(int i=1;i<=(ans+1)/2;i++)
            printf("%d %d
    ",a[i],a[i+ans/2]); 
        return 0;
    }
  • 相关阅读:
    改善深层神经网络
    IO操作 第一篇 学习(转载)
    杂谈:收集的一些博文
    杭电2072
    Java数组常用方法
    JAVA中final修饰符小结
    南阳106
    南阳283
    南阳277
    南阳458
  • 原文地址:https://www.cnblogs.com/lusiqi/p/13301576.html
Copyright © 2011-2022 走看看