cf 1059e 思维 贪心 树

参考博客:http://www.cnblogs.com/waldenlake/p/9750249.html

题意:将一棵n个点的带权有根树剖分成尽量少的链,使得

(1)链的两个端点是祖先关系

(2)链含有的顶点个数小于等于L

(3)链上所有点的点权和小于等于S。
求出最少链的数量,如果无解输出-1。N<=105

 

思路:

想法非常的新颖 ,根据子节点的情况来决定父节点是跟随某个子节点继续向上,还是自己独立开始一段新的path。

但是!!!想想这个问题的性质,有个疑问:局部最优会导致全局最优吗?答案是肯定的,所以,直接上贪心!

 

我们来看这个贪心的性质,就是有两个叶子节点a,b,他们有公共的父节点c,沿着a,b一直向上寻找(不同问题有不同寻找方向,一般从下网上,但别被拘束),直到长度或者w超限,假设a能到c上面的一个节点,b却能到c上面的三个节点,那么这三个节点划分到b的path为最优,因为我总不至于能包含却不去包含他们的。

就是说,即便先选了a,向上追溯并染色到了c上1点,后选了b,向上追溯并染色到了c上3点,我们不就是等于说,a的后半段不跟a了,改成属于b的path。因为我们总是改变后半段的归属,右总是从叶子节点开始,所以这种贪心总是能得到更好的结果,而且保证最好的结果是总能出现的。

 

下面的代码是可以hack的,因为没有保证每次都是从叶子节点开始寻找,只要做一次bfs对层次作排序就能保证son总是出现father后

 

\没想到div2最后一题居然这么简单的贪心就可以解决。。还是思维不够@#$%

 

#include<bits/stdc++.h>
using namespace std;#define ll long long
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define pii pair<int,int>
#define all(v) v.begin(),v.end()const int  N = 1E5+3;ll w[N],p[N];
int vis[N];int main(){ll n,l,s;cin>>n>>l>>s;int f=0;for(int i=1;i<=n;++i){cin>>w[i];if(w[i]>s)f=1;}for(int i=2;i<=n;++i)cin>>p[i];if(f){printf("-1\n");return 0;}int ans= 0 ;//其实还不太准确 要保证从叶子开始for(int i=n;i>=1;--i){if(vis[i]==0){ans++;int j = i;ll xl =l,xs= s;while(xs >= w[j] && xl>0 && j!=0){xs -= w[j];   vis[j]=1;xl--;j = p[j];}}}cout<<ans<<endl;return 0;
}

 

转载于:https://www.cnblogs.com/wjhstudy/p/9766794.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powermock模拟对象_使用PowerMock模拟构造函数

powermock模拟对象在我看来&#xff0c;依赖注入的主要好处之一是可以将模拟和/或存根对象注入代码中&#xff0c;以提高可测试性&#xff0c;增加测试覆盖率并编写更好&#xff0c;更有意义的测试。 但是&#xff0c;有时候您会遇到一些不使用依赖注入的传统代码&#xff0c;而…

宝塔 没有找到站点_宝塔面板正确开启TLS 1.3并删除TLS 1.1

昨天折腾了一个AlphaSSL泛域名证书后&#xff0c;心血来潮去SSL评分网站测试了一番&#xff0c;最后的结果竟然是B&#xff0c;这真是不能忍啊……为啥会是B&#xff0c;查看了原因&#xff0c;竟然是启用了TLS 1.1&#xff0c;所以为B。那么&#xff0c;删除TLS 1.1不就可以了…

线程同步机制:互斥量、信号量、读写锁、条件变量

一、互斥量&#xff08;mutex&#xff09; 互斥量本质上是一把锁&#xff0c;在访问共享资源前对互斥量进行加锁&#xff0c;在访问完成后释放互斥量上的锁。 对互斥量进行加锁以后&#xff0c;任何其它试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放…

在Cloudfoundry上部署RESTful服务

在本文中&#xff0c;我们将使用Pivotal Cloud Foundry&#xff08;PCF&#xff09;Dev在Cloudfoundry上部署RESTful服务。 由于创建静态Web服务不是本文的一部分&#xff0c;因此我已经创建了employee-service &#xff0c;它具有静态后端&#xff0c;可从GitHub进行克隆。 在…

mysql 全连接查询合并字段

1、创建两张表 t1如下&#xff1a; idname1a13a3 t2如下&#xff1a; idname1b12b25b5 联合查询合并字段&#xff1a; sql语句&#xff1a; SELECT t3.name AS B, t3.name1 AS C ,COALESCE(t3.id2,t3.id1) AS myId FROM (SELECT t1.id as id2 ,t1.name as name,t2.id as id…

小米刷第三方recovery_小米平板4/Plus LTE版本开启电话功能

众所周知&#xff0c;因为入网许可或通信基带使用权限的问题&#xff0c;小米平板4/plus LTE版本通过系统的方式阉割了通话功能&#xff0c;不过硬件完全是支持的&#xff0c;所有还是有办法让你的平板可以像手机一样&#xff0c;可以通话&#xff0c;可以发送短信。过Magisk刷…

最佳线程数总结(1

最佳线程数: 性能压测的情况下&#xff0c;起初随着用户数的增加&#xff0c;QPS会上升&#xff0c;当到了一定的阀值之后&#xff0c;用户数量增加QPS并不会增加&#xff0c;或者增加不明显&#xff0c;同时请求的响应时间却大幅增加。这个阀值我们认为是最佳线程数。 为什么要…

MongoDB和Java(5):Spring Data整合MongoDB(注解配置)

最近花了一些时间学习了下MongoDB数据库&#xff0c;感觉还是比较全面系统的&#xff0c;涉及了软件安装、客户端操作、安全认证、副本集和分布式集群搭建&#xff0c;以及使用Spring Data连接MongoDB进行数据操作&#xff0c;收获很大。特此记录&#xff0c;以备查看。 文章目…

新浪微博爬虫设计(Python版)

最近手头上有一个项目&#xff0c;是关于新浪微博的&#xff0c;其中有一环要做新浪微博的爬虫。虽然之前把《Python学习手册》和《Python核心编程》都囫囵吞栆地通读完了&#xff0c;不过真正到做项目的时候还是什么都不会。于是在网上找了大量的资料。关于获取新浪微博的内容…

python 返回空格_Python面试之 is 和 == 的区别

Python爬虫人工智能学习教程​www.python88.cn面试实习生的时候&#xff0c;当问到 is 和 的区别时&#xff0c;很多同学都答不上来&#xff0c;搞不清两者什么时候返回一致&#xff0c;什么时候返回不一致。本文我们来看一下这两者的区别。我们先来看几个例子&#xff1a;a …

【数据库设计和SQL基础语法】--索引和优化--SQL语句性能调优

一、SQL语句性能调优的基本原则 1.1 确定性能指标 响应时间 SQL语句性能调优的基本原则之一是确定性能指标&#xff0c;而其中最为关键的指标之一就是响应时间。响应时间是衡量数据库系统性能的重要指标&#xff0c;它表示从用户发送一个查询请求到接收到查询结果所经过的时间…

boke练习: spring boot: security post数据时,要么关闭crst,要么添加隐藏域

spring boot: security post数据时&#xff0c;要么关闭crst,要么添加隐藏域 http.csrf().disable();或者&#xff1a; <input name"${_csrf.parameterName}" type"hidden" value"${_csrf.token}">转载于:https://www.cnblogs.com/achengm…

法线有接缝_发送带有接缝的活动邀请

法线有接缝这些天来&#xff0c;我的一位同事在使用带有接缝&#xff08;版本2.x&#xff09;的邮件模板发送事件邀请时遇到了问题。 从根本上讲&#xff0c;这应该不是一项艰巨的任务&#xff0c;因此我将简要说明使用接缝邮件模板发送事件邀请需要做些什么。 发送邮件邀请时&…

LINUX任务(jobs)详解

转自 &#xff1a; http://hi.baidu.com/daweilang/item/58db8d308e54f6d56d15e999LINUX任务(jobs)详解 在用管理员执行一个命令后&#xff0c;用CtrlZ把命令转移到了后台。导致无法退出root的。 输入命令&#xff1a;exit 终端显示&#xff1a;There are stopped jobs. 解决方…

网页爬虫的设计与实现(Java版)

最近为了练手而且对网页爬虫也挺感兴趣&#xff0c;决定自己写一个网页爬虫程序。首先看看爬虫都应该有哪些功能。内容来自&#xff08;http://www.ibm.com/developerworks/cn/java/j-lo-dyse1/index.html?cadrs-&#xff09;网页收集的过程如同图的遍历&#xff0c;其中网页就…

springboot entity date_SpringBoot+JWT实战(附源码)

SpringBoot集成JWT首先我们搭建好SpringBoot框架&#xff0c;SpringBoot环境准备就绪。接下来执行以下操作&#xff1a;1.引入依赖引入JWT依赖,由于是基于Java&#xff0c;所以需要的是java-jwt。<dependency><groupId>com.auth0</groupId><artifactId>…

六、springboot(三)配置双数据源

1、目录结构 2.jdbc.properties配置 #db hougespring.datasource.houge.jdbc-urljdbc:oracle:thin:192.168.0.120:1521:ORCLspring.datasource.houge.usernamehougespring.datasource.houge.passwordmonkeyspring.datasource.houge.driver-class-nameoracle.jdbc.driver.Oracle…

在您的构建过程中添加微基准测试

介绍 作为一个行业&#xff0c;我们正在采用更高的透明度和更可预测的构建过程&#xff0c;以减少构建软件的风险。 持续交付的核心原则之一是通过反馈循环收集反馈。 在Dev9中 &#xff0c;我们采用了与CD原则相一致的“ 先知道 ”原则&#xff0c;这意味着我们&#xff08;开…

【C/C++】Linux下使用system()函数一定要谨慎

曾经的曾经&#xff0c;被system()函数折磨过&#xff0c;之所以这样&#xff0c;是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令&#xff0c;这远远不够&#xff0c;它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位&#xff0c;…

定时器和多线程的不同

最近在做项目的时候&#xff0c;遇到了视频采集图像时。使用定时器与或使用多线程有些纠结。原先用了定时器测试了&#xff0c;因为项目需要占用较多的cpu&#xff0c;所以很明显图像显示比较卡。 所以网上查了下。贴出来大家学习学习。 软件定时器和多线程在控制工程中有着非…