cf1039D 分块
cf1039D
链接
cf
思路
一次k可以贪心O(n)算。
对于\(≤\sqrt{n}\)的k,暴力算。
对于\(>\sqrt{n}\)的k,最多会有\(\sqrt{n}\)种答案,而且答案单调。
二分就行了。
复杂度\(O(nlogn+n\sqrt{n}logn)\)
递归会被卡,所以要记录dfs序然后循环
代码
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
const int _=1e5+7;
inline int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,g[_],head[_],tot,stak[_],fa[_],top;
struct node {int v,nxt;}e[_<<1];
inline void add(int u,int v) {e[++tot].v=v,e[tot].nxt=head[u],head[u]=tot;}
void dfs(int u,int F) {fa[u]=F,stak[++top]=u;for(int i=head[u];i;i=e[i].nxt)if(e[i].v!=F) dfs(e[i].v,u);
}
int calc(int L) {int ans=0;for(int i=1;i<=n;++i) g[i]=1;for(int i=n;i>=2;--i) {int u=stak[i],v=fa[u];if (g[v]+g[u]>=L) ++ans,g[v]=0;else if(g[v]) g[v]=max(g[v],g[u]+1);}return ans;
}
int main() {n=read();for(int i=1,u,v;i<n;++i) {u=read(),v=read();add(u,v),add(v,u);}int k=sqrt(n*log2(n));printf("%d\n",n);dfs(1,0);for(int i=2;i<=k;++i) printf("%d\n",calc(i));for(int i=k+1;i<=n;) {int l=i,r=n,R=i,ans=calc(i);while(l<=r) {int mid=(l+r)>>1;if(calc(mid)==ans) R=mid,l=mid+1;else r=mid-1;}for(;i<=R;++i) printf("%d\n",ans);}return 0;
}
转载于:https://www.cnblogs.com/dsrdsr/p/11405978.html
cf1039D 分块相关推荐
- java 二分搜索获得大于目标数的第一位_程序员常用查找算法(顺序、二分、插值、分块、斐波那契)...
顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...
- 数据库 大数据访问及分区分块优化方案
本文导读:当系统要满足每秒数万次的读写请求的需求时,我们可以用分布式计算.编写优良的程序代码.对海量数据进行分区操作.建立广泛的索引.建立缓存机制.加大虚拟内存.分批处理.使用数据仓库和多维数据库存储 ...
- OpenCV 【一】—— OpenCV中数组指针、图像分块计算、指针取像素值与MatToEigen方法,内存对齐
{ Topic1: 高效开辟内存,使适用于大型数组.//开辟新数组,或者开辟新的0或者某一数值的数组/Mat或者Map直接使用memset //大数组操作效率较高 举例1:cv::Mat cv_ncc ...
- GDAL中GDALDataset::RasterIO分块读取的实现
GDALDataset类中的RasterIO函数能够对图像任意指定区域.任意波段的数据按指定数据类型.指定排列方式读入内存和写入文件中,因此可以实现对大影像的分块读.写运算操作.针对特大的影像图像,有 ...
- python分块处理功能_Python-numpy实现灰度图像的分块和合并方式
我就废话不多说了,直接上代码吧! from numpy import * import numpy as np import cv2, os, math, os.path from PIL impor ...
- bzoj2724: [Violet 6]蒲公英(分块)
传送门 md调了一个晚上最后发现竟然是空间开小了--明明算出来够的-- 讲真其实我以前不太瞧得起分块,觉得这种基于暴力的数据结构一点美感都没有.然而今天做了这道分块的题才发现分块的暴力之美(如果我空间 ...
- HDU 4467 分块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4467 题意:给定n个点m条边的无向图,点被染色(黑0/白1),边带边权.然后q个询问.询问分为两种: ...
- 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块
题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...
- 2021HDU多校第一场 zoto(莫队+分块)
题意: 给你一个序列,q次询问,每次询问l-r的区间内数字大小为x-y之间内不重复的个,保证数据所有大小为1e5以内. 思路: 比赛的时候通过调整了一下分块的大小和各种优化,用莫队把题目给卡过去了,实 ...
最新文章
- 网站图片如何优化才对排名有所提升呢?
- hdu 3853 LOOPS 概率DP
- FFPEG 转码记录------解决了有流,但是没有码率和FPS?
- hybrid app、web app与native app工具
- Github Pages 搭建个人网站
- oracle数据泵导入分区表,数据泵导入分区表统计信息报错(七)
- cglib动态代理导致注解丢失问题及如何修改注解允许被继承
- PAT乙:1022 D进制的A+B
- 计算机机房新风机管道布置要求,新风系统管道布置—新风系统管道布置连接方法介绍...
- Expected object of backend CPU but got backend CUDA for argument #4 ‘mat1‘
- C++ int与string互转换
- sql 语句 查询结果赋值变量_RationalDMIS 7.1 变量赋值 ASSIGN语句
- delphi xe datasnap 服务器显示客户端,Delphi xe datasnap
- python下载付费文档教程-用Python批量爬取付费vip数据,竟然如此简单
- 国外电子与通信教材系列最新目录单
- 各类编程语言教程合集
- 找金币问题/只秤一次找出真假金币在哪个箱子
- 图的割点(解释及实现)
- Linux串口编程select方式
- 洛谷 P2791 幼儿园篮球题
热门文章
- java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...
- ubuntu16.04安装MATLAB R2017b步骤详解(附完整破解文件包)
- 远程连接Oracle 数据库连接报错ORA-12638身份检索失败
- execl中设置的格式无法实现
- 中高级JavaScript易错面试题
- Linux网络参数设置
- __construct()和__initialize()
- POJ2941 SDUT2371Homogeneous squares
- Servlet - cookie、session、servletContext概述
- U盘专杀工具,U盘防御软件,U盘病毒防火墙--UDiskSyS