zoukankan      html  css  js  c++  java
  • CF 1042F Leaf Sets

    贪心题

    易证,在保证当前元素数量的前提下使一个大集合中的最长边最小时显然是最优情况

    之后就是代码实现了

     1 #include<vector>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int n,m,cnt,tot,rt;
     7 int fa[1000005];
     8 int head[1000005];
     9 int dgr[1000005];
    10 struct Edge{
    11     int fr;
    12     int to;
    13     int nxt;
    14 }edge[2000005];
    15 void addedge(int f,int t){
    16     cnt++;
    17     edge[cnt].fr=f;
    18     edge[cnt].to=t;
    19     edge[cnt].nxt=head[f];
    20     head[f]=cnt;
    21 }
    22 int dfs(int u){
    23     if(dgr[u]==1)return 1;
    24     vector<int>tr;
    25     for(int i=head[u];i;i=edge[i].nxt){
    26         int v=edge[i].to;
    27         if(v==fa[u])continue;
    28         fa[v]=u;
    29         int tmp=dfs(v);
    30         tr.push_back(tmp);
    31     }
    32     int siz=tr.size();int i;
    33     sort(tr.begin(),tr.end());
    34     for(i=siz-1;i>=1;i--){
    35         if(tr[i]+tr[i-1]<=m)break;
    36         tot++;
    37     }
    38     return tr[i]+1;
    39 }
    40 int main(){
    41     scanf("%d%d",&n,&m);
    42     for(int i=1;i<n;i++){
    43         int u,v;
    44         scanf("%d%d",&u,&v);
    45         addedge(u,v);
    46         addedge(v,u);
    47         dgr[u]++,dgr[v]++;
    48         if(dgr[u]>1)rt=u;
    49         if(dgr[v]>1)rt=v;
    50     }
    51     dfs(rt);
    52     printf("%d
    ",tot+1);
    53     return 0;
    54 }
  • 相关阅读:
    mysql check约束无效
    Illegal mix of collations for operation 'concat'
    执行automake时报错 error while making link: Operation not supported
    GCC 编译详解[转]
    gcc的选项
    关于MFLAGS与MAKEFLAGS
    gcc和g++的区别
    g++参数介绍
    gcc/g++基本命令简介
    semver语义化版本号
  • 原文地址:https://www.cnblogs.com/lnxcj/p/9874007.html
Copyright © 2011-2022 走看看