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;
    }
  • 相关阅读:
    JVM系列-001-JVM监控工具
    Java8-CompletableFuture
    Java8-ConcurrentUtils
    Java8-LongAccumulator
    Java8-Atomic
    Java8-ConcurrentHashMap
    Java8-Synchronized-No.02
    Java8-Synchronized-No.01
    Java8-Executors-No.03
    Java8-Executors-No.02
  • 原文地址:https://www.cnblogs.com/lusiqi/p/13301576.html
Copyright © 2011-2022 走看看