博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[CF1042F] Leaf Sets
阅读量:5054 次
发布时间:2019-06-12

本文共 1058 字,大约阅读时间需要 3 分钟。

这个问题可以用贪心解决。

可以发现,每个节点的所有叶子节点中,真正起约束作用的是深度最大的那个。

因为大的满足了,小的一定也满足。

这样dfs函数返回一个当前点最深的叶子的距离即可。

每次处理完所有子节点之后排个序就行了。

1 #include
2 #include
3 #include
4 using namespace std; 5 6 int n,k; 7 int hd[1000005],to[2000005],nx[2000005],ec; 8 int deg[1000005]; 9 10 int read()11 {12 int ret=0;char c=getchar();13 while(c<'0'||c>'9')c=getchar();14 while(c>='0'&&c<='9')ret=ret*10+c-'0',c=getchar();15 return ret;16 }17 18 void edge(int af,int at)19 {20 to[++ec]=at;21 nx[ec]=hd[af];22 hd[af]=ec;23 deg[at]++;24 }25 26 int st[1000005],tp;27 int ans;28 29 int dfs(int p,int fa)30 {31 if(deg[p]==1)return 0;32 int l=tp+1;33 tp+=deg[p]-1;34 int r=l;35 for(int i=hd[p];i;i=nx[i])36 if(to[i]!=fa)37 st[r++]=dfs(to[i],p)+1;38 r--;39 sort(st+l,st+r+1);40 while(r-l&&st[r]+st[r-1]>k)r--,ans++;41 return st[r];42 }43 44 int main()45 {46 scanf("%d%d",&n,&k);47 for(int i=1;i

 

转载于:https://www.cnblogs.com/eternhope/p/9833069.html

你可能感兴趣的文章
[差分][倍增lca][tarjan] Jzoj P3325 压力
查看>>
[数学][dp] Jzoj P4236 登山
查看>>
C++继承方式
查看>>
Page2
查看>>
FIT2096 Assignment 2 2019
查看>>
软件工程实验一 复利计算——单元测试
查看>>
Python多进程并发(multiprocessing)
查看>>
读取配置文件参数和文件路径
查看>>
2017 UESTC Training for Graph Theory
查看>>
oracle实用的sqlplus命令
查看>>
Selenium上机实验
查看>>
BZOJ1369/BZOJ2865 【后缀数组+线段树】
查看>>
微软ASP.NET站点部署指南(8):部署Code-Only更新
查看>>
FreeModbus移植实例(转)
查看>>
筛素数 [高效]
查看>>
正則表達式(轉)
查看>>
Java并发编程:线程池的使用
查看>>
Python 的xlutils模块
查看>>
springMVC笔记(四)- 不配置HandlerMapping
查看>>
解决zabbix可用性为灰色状态
查看>>