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

【二分+贪心】CF1665 C

Problem - C - Codeforces

题意:

 

思路:

一开始想太简单wa6了

只想到先感染大的分量,然后最后把最大的分量剩下的染色

但是可能会有别的分量更大(因为最后给最大的染色之后可能不再是最大的)

可以用堆维护,但是这里用二分做法

我们可以二分答案mid,问题就变成了mid秒内能否感染所有结点.

首先Injection一定用于优先感染兄弟结点比较多的结点,这样可以充分利用Spreading,我们可以结点按照兄弟的数量排序,然后优先感染兄弟多的结点.这样我们就知道了,第一秒被Injection的结点剩下的时间里可以被Spreading mid-1个兄弟,第二秒可以被Injection的结点可以被Spreading mid-2个兄弟,所以我们扫描一遍就可以知道还剩下多少个兄弟结点还没被感染,判断能否用剩下的Injection的操作将这些结点感染即可. 

Code:

#include <bits/stdc++.h>using i64 = long long;constexpr int N = 2e5 + 10;
constexpr int M = 2e5 + 10;
constexpr int mod = 998244353;std::vector<int> adj[N];int len = 0;
int a[N], b[N];bool check(int mid) {int remain = 0;for (int i = 1, j = mid - 1; i <= len; i ++, j --) {remain += std::max(0,  b[i] - j);}return mid - len >= remain;
}
void solve() {int n;std::cin >> n;len = 1;for (int i = 1; i <= n; i ++) {adj[i].clear();b[i] = 0;}b[0] = 1;for (int i = 2; i <= n; i ++) {int x;std::cin >> x;adj[x].push_back(i);}for (int i = 1; i <= n; i ++) {if (adj[i].size()) {b[++len] = adj[i].size() - 1;}}std::sort(b + 1, b + 1 + len, std::greater<int>());int ans = 0;int l = 1, r = 1e9;while(l <= r) {int mid = l + r >> 1;if (check(mid)) {ans = mid;r = mid - 1;}else {l = mid + 1;}}std::cout << ans << "\n";
}
signed main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t = 1;std::cin >> t;while(t --) {solve();}return 0;
}

http://www.lryc.cn/news/119262.html

相关文章:

  • 【Wamp】安装 | 局域网内设备访问
  • 【golang】类型推断和变量重声明
  • “算法详解”系列第3卷贪心算法和动态规划出版
  • CSS前端开发指南:创造精美的用户界面
  • 代数学与理论物理中常见的群
  • 解析xml文件,获取需要的数据并写入txt文件中
  • JavaScript基础 第三天
  • 2.Redis部署到Windows服务器
  • 【修正-高斯拉普拉斯滤波器-用于平滑和去噪】基于修正高斯滤波拉普拉斯地震到达时间自动检测研究(Matlab代码实现)
  • Go语言基础: 有参函数Func、Map、Strings详细案例教程
  • JDBC连接数据库如何实现你会吗???
  • C#与C++交互(2)——ANSI、UTF8、Unicode文本编码
  • SQLSTATE[42000]: this is incompatible with sql_mode=only_full_group_by in
  • 企业权限管理(五)-订单分页
  • Blender如何给fbx模型添加材质贴图并导出带有材质贴图的模型
  • MySQL不走索引的情况分析
  • 安装ubuntu22.04系统,配置国内源以及ssh远程登录
  • win10 安装ubuntu子系统并安装宝塔
  • gazebo 导入从blender导出的dae等文件
  • 目标检测YOLOv3基于DarkNet53模型测试-笔记
  • Unity项目中查找所有使用某一张图片的材质球,再查找所有使用材质球的预设
  • postman接口测试中文汉化教程
  • java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver的解决办法
  • 认识所有权
  • 恒盛策略:怎样看k线图实图详解如何看懂k线图?
  • 物联网的定义、原理、示例、未来
  • Vue 整合 Element UI 、路由嵌套和参数传递(五)
  • Git全栈体系(四)
  • 数据结构初阶--二叉树的链式结构
  • Taro UI中的AtTabs