Description

Link.

有一棵 \(n\) 个节点的树,其中一个简单路径的集合被称为 \(k\) 合法当且仅当:树的每个节点至多属于其中一条路径,且每条路径恰好包含 \(k\) 个点。

对于 \(k\in [1,n]\),求出 \(k\) 合法路径集合的最多路径数。

即:设 \(k\) 合法路径集合为 \(S\),求最大的 \(|S|\)。

Solution

设 \(f(i)\) 为 \(k=i\) 时的答案,因为限定了每条路径的结点数,所以 \(f(i)\le\lfloor\frac{n}{i}\rfloor\),差不多可以看出 \(f(i)\) 是单调不增的。

然后仔细看这个形式,是不是长得很像数论分块?所以连续 \(f(i)\) 相同的值的块长为至少 \(\sqrt{n}\)。

然后枚举左端点,二分找右端点,求解 \(f(i)\) 应该是常见 trick。

听说直接二分常数很大,所以要写整体二分。我也不会卡常,所以就写整体二分叭。

#include<bits/stdc++.h>
int n,ans[100010],delta,f[100010];
int head[100010],nxt[200010],to[200010],cntot;
void addEdge(int one,int ano) {
to[++cntot]=ano;
nxt[cntot]=head[one];
head[one]=cntot;
}
void dfs(int x,int las,int rule) {
int fs=0,sc=0;
for(int i=head[x];i;i=nxt[i]) {
int y=to[i];
if(y^las) {
dfs(y,x,rule);
if(f[y]>=fs) {
sc=fs;
fs=f[y];
}
else if(f[y]>=sc) sc=f[y];
}
}
if(fs+sc+1>=rule) {
f[x]=0;
++delta;
}
else f[x]=fs+1;
}
void rawGrass(int l,int r,int fr,int ba) {
if(l>r || fr>ba) return;
if(l^r) {
int mid=(fr+ba)>>1;
delta=0;
dfs(1,0,mid);
ans[mid]=delta;
rawGrass(delta,r,fr,mid-1);
rawGrass(l,delta,mid+1,ba);
}
else {
for(int i=fr;i<=ba;++i) ans[i]=l;
}
}
void read(int &hhh) {
int x=0,f=1;
char c=getchar();
while(c<'0' || c>'9') c=getchar();
while(c>='0' && c<='9') {
x=(x<<3)+(x<<1)+(c^'0');
c=getchar();
}
hhh=x;
}
void write(int x,char las='\n') {
static int stack[100],top=0;
do {
stack[++top]=x%10;
x/=10;
}while(x);
while(top) putchar(stack[top--]^'0');
putchar(las);
}
int main() {
read(n);
for(int i=1,x,y;i<n;++i) {
read(x);
read(y);
addEdge(x,y);
addEdge(y,x);
}
rawGrass(0,n,1,n);
for(int i=1;i<=n;++i) write(ans[i]);
return 0;
}

Solution -「CF 1039D」You Are Given a Tree的更多相关文章

  1. Solution -「CF 1491H」Yuezheng Ling and Dynamic Tree

    \(\mathcal{Description}\)   Link. 做题原因:题目名.   给定一个长度 \(n-1\) 的序列 \(\{a_2,a_3,\cdots,a_n\}\),其描述了一棵 \ ...

  2. Solution -「CF 1342E」Placing Rooks

    \(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...

  3. Solution -「CF 1622F」Quadratic Set

    \(\mathscr{Description}\)   Link.   求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...

  4. Solution -「CF 923F」Public Service

    \(\mathscr{Description}\)   Link.   给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...

  5. Solution -「CF 923E」Perpetual Subtraction

    \(\mathcal{Description}\)   Link.   有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...

  6. Solution -「CF 1586F」Defender of Childhood Dreams

    \(\mathcal{Description}\)   Link.   定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...

  7. Solution -「CF 1237E」Balanced Binary Search Trees

    \(\mathcal{Description}\)   Link.   定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...

  8. Solution -「CF 623E」Transforming Sequence

    题目 题意简述   link.   有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...

  9. Solution -「CF 1023F」Mobile Phone Network

    \(\mathcal{Description}\)   Link.   有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...

  10. Solution -「CF 599E」Sandy and Nuts

    \(\mathcal{Description}\)   Link.   指定一棵大小为 \(n\),以 \(1\) 为根的有根树的 \(m\) 对邻接关系与 \(q\) 组 \(\text{LCA}\ ...

随机推荐

  1. 攻防世界_ezmaze

    题目:ezmaze re选手投递区 链接:https://adworld.xctf.org.cn/challenges/details?hash=8254ba70-6bfd-11ed-ab28-000 ...

  2. 【可视化大屏】用Python开发「淄博烧烤」微博热评舆情分析大屏

    目录 一.开发背景 二.爬虫代码 2.1 爬微博列表 2.2 爬微博评论 2.3 导入MySQL数据库 三.可视化代码 3.1 大标题 3.2 词云图(含:加载停用词) 3.3 玫瑰图(含:snown ...

  3. Redis系列16:聊聊布隆过滤器(原理篇)

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  4. CKS 考试题整理 (03)-kube-bench 修复不安全项

    Context 针对 kubeadm 创建的 cluster 运行 CIS 基准测试工具时,发现了多个必须立即解决的问题. Task 通过配置修复所有问题并重新启动受影响的组件以确保新的设置生效. 修 ...

  5. Spark架构与运行流程

    1. 阐述Hadoop生态系统中,HDFS, MapReduce, Yarn, Hbase及Spark的相互关系. 2. Spark已打造出结构一体化.功能多样化的大数据生态系统,请简述Spark生态 ...

  6. 前端vue基于echart实现散点图

    前端vue基于echart实现散点图, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id=12866 效果图如下:   参考代码如 ...

  7. 聊聊Flink CDC必知必会

    CDC是(Change Data Capture变更数据获取)的简称. 核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入INSERT.更新UPDATE.删除DELETE等),将这些变更按 ...

  8. 代理详解(java代理和CGLIB动态代理)

      [代理]大家都知道,特别是在spring中aop.spring中的事务.spring解析注解@Configuration,以及最原始的解析spring.xml的配置,这些都是使用代理来进行实现的, ...

  9. PowerBuilder从入坑到放弃(二)编码规范

    前言 上一篇我们从0到1用pb开发了一个helloworld程序,并成功将开发的程序编译打包并且制作了安装包. 程序员最讨厌的莫过于写文档和别人不写注释. 不知道大家会不会和我一样,在找bug时,有段 ...

  10. docker 公有仓库与私有仓库常见操作

    本文为博主原创,转载请注明出处: 自建一个Docker仓库,可以使用Docker官方提供的开源项目Docker Registry.以下是一些基本步骤: 安装Docker Registry: 在服务器上 ...