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

CSP-S 2025 提高级模拟赛 Day6 复盘 B.连通子图

题意

给定正整数 \(k\),求构造一棵树,使得包含了1号点的连通子图个数恰好为 \(k\)

赛时做法

没想出来,骗了个 \(n\leq60\) 的20pts部分分(输出一条长度为 \(k\) 的链,此时一定有 \(k\) 个联通子图)

#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;int k;
int main(){freopen("b.in","r",stdin);freopen("b.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);while(cin >> k){if(k<=60){cout << k << '\n';for(int i=1;i<k;i++){cout << i << ' ' << i+1 << '\n';}continue;}else if(k==118){cout << "13\n";cout << "1 2\n1 3\n1 4\n3 5\n3 6\n6 7\n6 8\n6 9\n9 10\n9 11\n";continue;}}
}

赛后分析

如果我们自下而上构造,在当前根节点下方添加一个子节点会使连通子图个数乘二,添加父节点会使连通子图个数加一。
考虑对 \(k\) 二进制拆分,从最高位开始按照位数构造,每次在当前根节点下方添加一个子节点,如果该位为 1 就新建一个父节点,并把父节点设置为根节点。
这个算法的节点数就为k在二进制下的位数+ \(k\) 在二进制下为1的位数,显然不会超过60 ,时间复杂度\(\mathcal{O}(\log k)\)

#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
vector<pair<int,int>> g;
int k;
int main(){freopen("b.in","r",stdin);freopen("b.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);while(cin >> k){g.clear();int p=30;for(int i=29;i>=0;i--)if(k>>i&1){p=i;break;}int tot=0,r=0;for(int i=p;i>=0;i--){if(k>>i&1){tot++;if(r)g.emplace_back(tot,r);r=tot;}if(i)g.emplace_back(r,++tot);}cout << tot << '\n';for(auto p:g)cout << ((p.first-r+tot)%tot+1) << ' ' << ((p.second-r+tot)%tot+1) << '\n';}
}

总结

思维能力还是不行,要多练。

http://www.rkmt.cn/news/20479.html

相关文章:

  • 基于Java的家政服务管理优秀的系统的设计与完成-计算机毕设 附源码05300
  • 业务定义与指标体系搭建
  • centos7 离线安装mysql8 并建立主从架构
  • 项目计划管理实战:从“纸上谈兵”到“动态导航”的艺术 - 实践
  • 分享一个知乎高赞回答生成AI指令:让技术人也能写出有深度的回答
  • SSL证书批量申请终极指南:一次搞定所有域名
  • PDF转图片工具:基于PyQt5的完整实现与深度解析 - 详解
  • 统计学习方法学习Day01
  • gpt-5-codex vs gpt-5
  • 成员内部类
  • 用 Fortran 进行英文数字验证码识别
  • webpack优化前端性能
  • uml九类例图详解
  • C语言自学--自定义类型:结构体 - 指南
  • 苹果iMessage群发协议,苹果iMessage短信,苹果iMessage推信,iMessage协议版自动群发完美实现。
  • 06-mysql备份实战 #
  • Java 架构师系列:JVM 与 AI 负载的优化策略 - 指南
  • java循环
  • 070_尚硅谷_其它进制转十进制
  • python中修改局部json的思路
  • 部署 GitLab 服务器 - 实践
  • 第十三节:基于 Redis+MQ+DB实现高并发秒杀下的扣减
  • c++初体验
  • 四则运算错题本和错题重做的建立
  • 行列式的性质
  • 04_SQL语句一
  • 详细介绍:【C++】二叉搜索树
  • 20232323 2025-2026-1《网络与系统攻防技术》实验一实验报告
  • Zabbix 6.0+ 运用官方模板监控 Redis 数据库的完整安装指南
  • 【图论】Floyd算法简析