题目大意:

对于一棵树,我们定义“分支系数”为子节点最多的节点的子结点个数。现给出结点个数 $n$ 、所有节点的子树大小之和 $s$ ,同时规定符合条件的树的根节点必须是 $1$ 。请你判断是否存在一棵符合条件的树。如果存在,请你输出“分支系数”最小的符合条件的树。输出方式是,你需要分别输出编号为 $2$ 的节点~编号为 $n$  的节点的父节点。

思路:
考虑如果没有分支系数最小的限制,那么一条链的时候答案为 $i*(i+1)/2$ ,每次把最底层的叶子向上移动一层,答案就减 $1$ ,可以构造出一组解,但是答案不一定优。

显然,分支系数越大节点的子树大小之和上界越小。考虑二分出一个答案可行答案,之后在二分出的答案的基础上把节点贪心的往上层移动,可以构造出一组合法的解。

以下代码:

#include<bits/stdc++.h>
#define il inline
#define LL long long
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
const int N=1e5+5;
vector<int> v[N];
int n,fa[N],sz[N];LL s,sum,res;
il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;
}
il bool pd(int x){res=0;int t=n;LL now=1;int l=1;while(t){if(t>=now){res+=now*l;t-=now;}else{res+=t*l;t=0;}now*=x;l++;}return res<=s;
}
int main()
{n=read();scanf("%I64d",&s);if(s<n*2-1||1ll*n*(n+1)/2<s){puts("No");return 0;}if(1ll*n*(n+1)/2==s){puts("Yes");for(int i=1;i<n;i++)printf("%d ",i);return 0;}int l=1,r=n,ret=n;while(l<=r){int mid=(l+r)>>1;if(pd(mid))r=mid-1,ret=mid;else l=mid+1;}for(int i=1;i<=n;i++)v[i].push_back(i);s=1ll*n*(n+1)/2-s;for(int i=2;i<=n;i++)fa[i]=i-1,sz[i-1]=1;int now=1;for(int i=n;i;i--){while(v[now].size()==0)now++;if(i-now-1<=s){s-=(i-now-1);int k=v[now].size()-1;int d=v[now][k];sz[d]++;if(sz[d]==ret)v[now].pop_back();v[now+1].push_back(i);sz[fa[i]]--;fa[i]=d;}else{int k=i-s-1;int x=v[k][0];fa[i]=x;s=0;}if(s==0)break;}//printf("!!!%d ",ret);puts("Yes");for(int i=2;i<=n;i++)printf("%d ",fa[i]);return 0;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/10544622.html

CF 1098 C. Construct a tree相关推荐

  1. LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal-前序中序遍历构造二叉树-Python和Java递归解法

    题目地址:Construct Binary Tree from Preorder and Inorder Traversal - LeetCode Given preorder and inorder ...

  2. LeetCode: 106. Construct Binary Tree from Inorder and Postorder Traversal

    题目 Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume ...

  3. 【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal

    Construct Binary Tree from Inorder and Postorder Traversal Given inorder and postorder traversal of ...

  4. [leetcode] Construct Binary Tree from Preorder and Inorder Traversal

    Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a ...

  5. [LeetCode]*105.Construct Binary Tree from Preorder and Inorder Traversal

    题目 Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume t ...

  6. leetcode -day23 Construct Binary Tree from Inorder and Postorder Traversal Construct Binary Tree f

    1.  Construct Binary Tree from Inorder and Postorder Traversal Given inorder and postorder travers ...

  7. CF 1529C Parsa‘s Humongous Tree

    CF 1529C Parsa's Humongous Tree 题意: 给你一颗n个点,n-1个边的树,每个点的点权为一个区间值,树的值为边权和. 边权为该边的两个端点的点权差的绝对值的和 问树的值最 ...

  8. LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...

    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...

  9. 【Construct Binary Tree from Inorder and Postorder Traversal】cpp

    题目: Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume ...

最新文章

  1. 连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)
  2. mybatis 自定义函数_JDK动态代理一定要有代理对象吗?请你结合Mybatis回答
  3. tuxedo连接mysql_TUXEDO与INFORMIX数据库的互连
  4. 【C语言】x++与++x
  5. php怎么实现简单的mvc框架,php实现简单的MVC框架实例
  6. MySQL/MariaDB的response time插件
  7. USB移动硬盘使用中的怪现象
  8. Topcoder SRM 638 DIV 2 (大力出奇迹)
  9. Clojure 学习入门(17)- 异常处理
  10. 0.0 研磨设计模式
  11. 2.17.3-Python爬虫(requests登录)
  12. linux addr2line 用法,addr2line的用法
  13. python灰度雷达图_python 雷达图
  14. copyproperties爆红_一屋模玩怎样不能价值300万?分分钟用超.......
  15. 史上最全!数据分析进阶教程,看这一篇就够了!
  16. “蘑菇书“配套在线课程上线
  17. Linux使用tar命令进行磁带备份
  18. 【KATA练习日记】关于std::accumulate的使用
  19. sso 登出_最强SSO单点登录教程(三)单点注销流程分析
  20. Jetson AGX Orin刷机教程,奶奶看完都说会了!

热门文章

  1. C# 7.2和8.0路线图
  2. zabbix web前端取值同后端取值不一致
  3. PHP分页类(较完美)
  4. C#编程总结--总目录
  5. Java程序调用ssh, scp, sftp
  6. 在iOS中使用tableView
  7. 手工清理C:\windows\alg.exe病毒
  8. 深入浅出Service插件化原理
  9. jconsole工具使用----jvm内存泄漏问题
  10. 动态参数与静态参数的判断、修改