当前位置: 首页 > news >正文

【省选模拟测试23 T1直径】更好的做法

题目大意和普通做法

省选模拟测试23 T1直径


题解

对于上文中有三个儿子的根节点的树,其直径数量为ab+bc+caab+bc+caab+bc+ca。那么对于上文中有nnn个儿子的根节点的树,其直径数量为多少呢?

每个儿子所在子树中的点与其他儿子所在子树中的点都能组成一次直径,而两个点都能组成一次直径,所以要除以2。设第iii个儿子的儿子数量为aia_iai,则直径数量为

(∑ai)2−∑ai22\dfrac{(\sum a_i)^2-\sum a_i^2}{2}2(ai)2ai2

要让k=(∑ai)2−∑ai22k=\dfrac{(\sum a_i)^2-\sum a_i^2}{2}k=2(ai)2ai2,即2k=(∑ai)2−∑ai22k=(\sum a_i)^2-\sum a_i^22k=(ai)2ai2

根据题意,1+∑(ai+1)≤1051+\sum (a_i+1)\leq 10^51+(ai+1)105,于是我们可以枚举∑ai\sum a_iai

令所有的ai=1a_i=1ai=1,那么最多能有n×n−nn\times n-nn×nn条直径。5000×5000−5000>50000005000\times 5000-5000>50000005000×50005000>5000000,这些对于题目来说是绰绰有余的了。

枚举找到第一个v=∑aiv=\sum a_iv=ai,使得v∗v−v≥2kv*v-v\geq 2kvvv2k

对于多出的部分,我们可以将若干个aia_iai组合起来,达到减少更多的效果。

比如,将两个值为1的aia_iai合并为一个值为2的aia_iai,原来减少贡献为12+12=21^2+1^2=212+12=2,现在贡献为22=42^2=422=4,增加了222

当然,如果合并三个或更多,则减少的也会更多。找到一种方法,使其减少到正好为2k2k2k即可。

code

#include<bits/stdc++.h>
using namespace std;
int n,v,now,hv,tot=0,w,vt,a[5005];
struct node{int x,y,z;
}ans[5005];
int main()
{scanf("%d",&n);for(int i=1;i<=5000;i++){if(i*i-i>=n*2){v=i;break;}}now=v*v-v-n*2;hv=v;for(int i=v;i>=2;i--){while(now>=i*i-i&&hv>=i){now-=i*i-i;hv-=i;a[++w]=i;}}for(int i=1;i<=w+hv;i++){ans[++vt]=(node){1,i+1,10000+(i>w)};}tot=w+hv+1;for(int i=1;i<=w;i++){for(int j=1;j<=a[i];j++){ans[++vt]=(node){i+1,++tot,1};}}printf("%d\n",tot);for(int i=1;i<=vt;i++){printf("%d %d %d\n",ans[i].x,ans[i].y,ans[i].z);}return 0;
}
http://www.lryc.cn/news/31828.html

相关文章:

  • SpringCloud基础(3)-微服务远程调用
  • 10.单点登录原理及JWT实现
  • 图表控件LightningChart.NET 系列教程(十一):LightningChart 组件——添加至 Blend WPF 项目
  • libGDX:灯光效果实现一(实现一个点光源)
  • Java生态/Redis中如何使用Lua脚本
  • 网络编程 socket 编程(一)
  • 【SpringCloud】SpringCloud教程之Nacos实战(一)
  • 高通Android 12/13 默认应用程序授予权限
  • 代码随想录|day6|哈希表篇-- 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和
  • k8s学习之路 | Day20 k8s 工作负载 Deployment(下)
  • 考研复试——操作系统
  • Java ~ Collection/Executor ~ LinkedBlockingDeque【源码】
  • 【前缀和】截断数组、K倍区间、激光炸弹
  • 函数编程:强大的 Stream API
  • 企业架构图之业务架构图
  • 监控易网络管理:网络流量分析
  • RHCSA-文件内容显示(3.6)
  • Qt多线程文件查找器
  • 源码阅读笔记 InputFormat、FileInputFormat、CombineTextInputFormat
  • 二值图像骨架线提取
  • 规划数据指标体系方法(上)——OSM 模型
  • 做程序界中的死神,继续提升灵力上限
  • [数据结构]:11-冒泡排序(顺序表指针实现形式)(C语言实现)
  • Java实验报告经验总结
  • ESP32使用TCP HTTP访问API接口JSON解析获取数据
  • spring security 实现自定义认证和登录(4):使用token进行验证
  • 戴眼镜检测和识别2:Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码)
  • 信息收集之Google Hacking
  • 【面试题】如何避免使用过多的 if else?
  • oneblog_justauth_三方登录配置【Gitee】