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 分块相关推荐

  1. java 二分搜索获得大于目标数的第一位_程序员常用查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  2. 数据库 大数据访问及分区分块优化方案

    本文导读:当系统要满足每秒数万次的读写请求的需求时,我们可以用分布式计算.编写优良的程序代码.对海量数据进行分区操作.建立广泛的索引.建立缓存机制.加大虚拟内存.分批处理.使用数据仓库和多维数据库存储 ...

  3. OpenCV 【一】—— OpenCV中数组指针、图像分块计算、指针取像素值与MatToEigen方法,内存对齐

    { Topic1: 高效开辟内存,使适用于大型数组.//开辟新数组,或者开辟新的0或者某一数值的数组/Mat或者Map直接使用memset //大数组操作效率较高 举例1:cv::Mat cv_ncc ...

  4. GDAL中GDALDataset::RasterIO分块读取的实现

    GDALDataset类中的RasterIO函数能够对图像任意指定区域.任意波段的数据按指定数据类型.指定排列方式读入内存和写入文件中,因此可以实现对大影像的分块读.写运算操作.针对特大的影像图像,有 ...

  5. python分块处理功能_Python-numpy实现灰度图像的分块和合并方式

    我就废话不多说了,直接上代码吧! from numpy import * import numpy as np import cv2, os, math, os.path from PIL impor ...

  6. bzoj2724: [Violet 6]蒲公英(分块)

    传送门 md调了一个晚上最后发现竟然是空间开小了--明明算出来够的-- 讲真其实我以前不太瞧得起分块,觉得这种基于暴力的数据结构一点美感都没有.然而今天做了这道分块的题才发现分块的暴力之美(如果我空间 ...

  7. HDU 4467 分块

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4467 题意:给定n个点m条边的无向图,点被染色(黑0/白1),边带边权.然后q个询问.询问分为两种: ...

  8. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

    题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...

  9. 2021HDU多校第一场 zoto(莫队+分块)

    题意: 给你一个序列,q次询问,每次询问l-r的区间内数字大小为x-y之间内不重复的个,保证数据所有大小为1e5以内. 思路: 比赛的时候通过调整了一下分块的大小和各种优化,用莫队把题目给卡过去了,实 ...

最新文章

  1. 网站图片如何优化才对排名有所提升呢?
  2. hdu 3853 LOOPS 概率DP
  3. FFPEG 转码记录------解决了有流,但是没有码率和FPS?
  4. hybrid app、web app与native app工具
  5. Github Pages 搭建个人网站
  6. oracle数据泵导入分区表,数据泵导入分区表统计信息报错(七)
  7. cglib动态代理导致注解丢失问题及如何修改注解允许被继承
  8. PAT乙:1022 D进制的A+B
  9. 计算机机房新风机管道布置要求,新风系统管道布置—新风系统管道布置连接方法介绍...
  10. Expected object of backend CPU but got backend CUDA for argument #4 ‘mat1‘
  11. C++ int与string互转换
  12. sql 语句 查询结果赋值变量_RationalDMIS 7.1 变量赋值 ASSIGN语句
  13. delphi xe datasnap 服务器显示客户端,Delphi xe datasnap
  14. python下载付费文档教程-用Python批量爬取付费vip数据,竟然如此简单
  15. 国外电子与通信教材系列最新目录单
  16. 各类编程语言教程合集
  17. 找金币问题/只秤一次找出真假金币在哪个箱子
  18. 图的割点(解释及实现)
  19. Linux串口编程select方式
  20. 洛谷 P2791 幼儿园篮球题

热门文章

  1. java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...
  2. ubuntu16.04安装MATLAB R2017b步骤详解(附完整破解文件包)
  3. 远程连接Oracle 数据库连接报错ORA-12638身份检索失败
  4. execl中设置的格式无法实现
  5. 中高级JavaScript易错面试题
  6. Linux网络参数设置
  7. __construct()和__initialize()
  8. POJ2941 SDUT2371Homogeneous squares
  9. Servlet - cookie、session、servletContext概述
  10. U盘专杀工具,U盘防御软件,U盘病毒防火墙--UDiskSyS