Solution -「CF 1039D」You Are Given a Tree
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的更多相关文章
- Solution -「CF 1491H」Yuezheng Ling and Dynamic Tree
\(\mathcal{Description}\) Link. 做题原因:题目名. 给定一个长度 \(n-1\) 的序列 \(\{a_2,a_3,\cdots,a_n\}\),其描述了一棵 \ ...
- Solution -「CF 1342E」Placing Rooks
\(\mathcal{Description}\) Link. 在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...
- Solution -「CF 1622F」Quadratic Set
\(\mathscr{Description}\) Link. 求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...
- Solution -「CF 923F」Public Service
\(\mathscr{Description}\) Link. 给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...
- Solution -「CF 923E」Perpetual Subtraction
\(\mathcal{Description}\) Link. 有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...
- Solution -「CF 1586F」Defender of Childhood Dreams
\(\mathcal{Description}\) Link. 定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...
- Solution -「CF 1237E」Balanced Binary Search Trees
\(\mathcal{Description}\) Link. 定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...
- Solution -「CF 623E」Transforming Sequence
题目 题意简述 link. 有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...
- Solution -「CF 1023F」Mobile Phone Network
\(\mathcal{Description}\) Link. 有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...
- Solution -「CF 599E」Sandy and Nuts
\(\mathcal{Description}\) Link. 指定一棵大小为 \(n\),以 \(1\) 为根的有根树的 \(m\) 对邻接关系与 \(q\) 组 \(\text{LCA}\ ...
随机推荐
- Python 中常见的 TypeError 是什么?
翻译:BioIT 爱好者原文:TypeError: A Bytes-Like object Is Required, not 'str' | Finxter 简介 目标:在本教程中,我们的目标是修复以 ...
- Galaxy 生信平台(三):xlsx 上传与识别
我在<Firefox Quantum 向左,Google Chrome 向右>中,曾经吐槽过在 Firefox 中使用 Galaxy 上传本地的 Excel 文件时,会出现 xlsx 无法 ...
- CSI架构和原理
CSI CSI简介 CSI的诞生背景 K8s 原生支持一些存储类型的 PV,如 iSCSI.NFS.CephFS 等等,这些 in-tree 类型的存储代码放在 Kubernetes 代码仓库中.这里 ...
- 前端Vue自定义询问弹框和输入弹框
前端Vue自定义询问弹框和输入弹框, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13119 效果图如下: 使用方法 < ...
- ArcPy批量对大量遥感影像相减做差
本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件批量进行相减做差的方法. 首先,我们来明确一下本文的具体需求.现有一个存储有多张.tif格式遥感影像的文件夹,其中每一个遥感影像 ...
- Logistic Regression and its Maximum Likelihood Estimation
从 Linear Regression 到 Logistic Regression 给定二维样本数据集 \(D = \left\{ (\vec{x}_{1}, y_{1}), (\vec{x}_{2} ...
- 【ElasticSearch】大数据量情况下的前缀、中缀实时搜索方案
简述 业务开发中经常会遇到这样一种情况,用户在搜索框输入时要实时展示搜索相关的结果.要实现这个场景常用的方案有Completion Suggester.search_as_you_type.那么这两种 ...
- pip 更新
pip install --user --upgrade pip成功升级
- PyQt5清除数据(部分控件)
# 清除文本框 self.textEdit_detail.clear() # 清楚表格所有行 self.tableWidget.setRowCount(0) self.tableWidget.clea ...
- Linux文件与目录管理核心命令:看这篇就够了
Linux文件与目录核心命令 Linux命令操作语法示例 #命令 选项 参数 command [-options] [arguments] [root@localhost ~]# ls //命令 an ...