#构造#B 连通子图
题目
给定正整数\(k\),构造一棵树,使得包含了\(1\)号点的连通子图个数恰好为\(k\)。
连通子图就是点集的一个子集(可以为全集),使得该点集中任意两个点均可以经过该点集中的点相互到达。
分析
显然可以得到\(f[x]=\prod_{y\in son_x} (f[y]+1)\)
同时树的大小不超过60说明与log级别的算法有关,
如果将\(x\)多一个子节点那么个数乘2,如果增加父节点个数加1,
那可以通过这种方式构造
代码
#include <cstdio>
#include <cstring>
#define rr register
using namespace std;
struct node {
int y, next;
} e[71];
int n, root, tot, k, dfn[71], st, as[71];
inline void dfs(int x) {
dfn[x] = ++tot;
for (rr int i = as[x]; i; i = e[i].next) dfs(e[i].y);
}
signed main() {
freopen("b.in", "r", stdin);
freopen("b.out", "w", stdout);
while (scanf("%d", &n) == 1) {
root = tot = k = 1;
memset(as, 0, sizeof(as));
for (st = 29; ~st; --st)
if ((n >> st) & 1)
break;
for (rr int i = st - 1; ~i; --i) {
e[++k] = (node){ ++tot, as[root] }, as[root] = k;
if ((n >> i) & 1)
e[++k] = (node){ root, as[++tot] }, as[root = tot] = k;
}
tot = 0, dfs(root), printf("%d\n", tot);
for (rr int i = 1; i <= tot; ++i)
for (rr int j = as[i]; j; j = e[j].next) printf("%d %d\n", dfn[i], dfn[e[j].y]);
}
return 0;
}
#构造#B 连通子图的更多相关文章
- 最大半连通子图 bzoj 1093
最大半连通子图 (1.5s 128MB) semi [问题描述] 一个有向图G = (V,E)称为半连通的(Semi-Connected),如果满足:∀ u, v ∈V,满足u->v 或 v - ...
- BZOJ1093 [ZJOI2007]最大半连通子图
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...
- BZOJ 1093 [ZJOI2007] 最大半连通子图(强联通缩点+DP)
题目大意 题目是图片形式的,就简要说下题意算了 一个有向图 G=(V, E) 称为半连通的(Semi-Connected),如果满足图中任意两点 u v,存在一条从 u 到 v 的路径或者从 v 到 ...
- BZOJ1093 最大半连通子图
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意 两点u,v,存在一条u到v的有向路径或者从v到 ...
- BZOJ 1093 [ZJOI2007]最大半连通子图
1093: [ZJOI2007]最大半连通子图 Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1986 Solved: 802[Submit][St ...
- bzoj 1093 [ZJOI2007]最大半连通子图(scc+DP)
1093: [ZJOI2007]最大半连通子图 Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 2286 Solved: 897[Submit][St ...
- BZOJ 1093: [ZJOI2007]最大半连通子图( tarjan + dp )
WA了好多次... 先tarjan缩点, 然后题意就是求DAG上的一条最长链. dp(u) = max{dp(v)} + totu, edge(u,v)存在. totu是scc(u)的结点数. 其实就 ...
- [BZOJ]1093 最大半连通子图(ZJOI2007)
挺有意思的一道图论. Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:∀u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v ...
- LOJ-10092(最大半连通子图)
题目连通:传送门 思路: 题目定义很清晰,然后就不会了QAQ…… 后来看了书,先缩点,然后再用拓扑排序找到最长的链子的节点数(因为缩点后所有点都是一个强连通分量,所以找最长的链子就是最大限度包含 点的 ...
- BZOJ1093 ZJOI2007最大半连通子图(缩点+dp)
发现所谓半连通子图就是缩点后的一条链之后就是个模板题了.注意缩点后的重边.写了1h+真是没什么救了. #include<iostream> #include<cstdio> # ...
随机推荐
- 学习go语言编程之常量
什么在常量 在Golang中,常量是指在编译期就已知且不可改变的值. 字面常量 在程序中硬编码的常量值被称为字面常量,如: -12 // 整数类型常量 3.1415926 // 浮点类型常量 3.2+ ...
- Qt三方库开发技术(一):QuaZIP介绍、编译和使用
前言 Qt使用一些压缩解压功能,探讨过libzip库,zlib库,libzip库比较原始,还有其他库,都比较基础,而在基础库之上,又有高级封装库,Qt中的QuaZIP是一个很好的选择. 本文主要 ...
- 【Azure Function】示例运行 python durable function(model V2)
问题描述 参考官方文档(使用 Python 创建你的第一个持久函数:https://learn.microsoft.com/zh-cn/azure/azure-functions/durable/qu ...
- 【Azure 应用服务】基于Azure的CI/CD工具链部署App Service
问题描述 在中国区Azure中,App Service是否支持CI/CD工具部署呢? Windows 和Linux两个系统都是同样的方法吗? 问题解答 目前中国区Azure支持Windows 和 Li ...
- python代码,读取一个txt文件,将其中的每一行开头加上一个字母a,每一行的结尾加上一个字母b
with open('name.txt', 'r+') as file: lines = file.readlines() file.seek(0) # 将文件指针移回文件开头 file.trunca ...
- AIGC下一步:如何用AI再度重构或优化媒体处理?
让媒资中"沉默的大多数"再次焕发光彩. 邹娟|演讲者 编者按 AIGC时代下,媒体内容生产领域随着AI的出现也涌现出更多的变化与挑战.面对AI的巨大冲击,如何优化或重构媒体内容生产 ...
- Android---Android Studio项目目录结构分析.
1. .gradle 和.idea 这两个目录下放置的都是 Android Studio 自动生成的一些文件,我们无须关心,也不要去手 动编辑. 2. app 项目中的代码.资源等内容几乎都是放置在这 ...
- AI大模型加速RPAxAI时代到来,谁会是RPA领域的杀手级应用?
GPT等AI大模型震撼来袭,基于RPA的超级自动化仍是最佳落地载体 对话弘玑CPO贾岿,深入了解国产RPA厂商对AI大模型的探索与实践 文/王吉伟 关于RPA已死的说法,在中国RPA元年(2019年) ...
- logon scripts后门
Windows登录脚本,当用户登录时触发,Logon Scripts能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截 注册表位置:HKEY_CURRENT_USER\Environment 在命令 ...
- Python-使用openpyxl读取excel内容
1. 本篇文章目标 将下面的excel中的寄存器表单读入并构建一个字典 2. openpyxl的各种基本使用方法 2.1 打开工作簿 wb = openpyxl.load_workbook('test ...