题解-家谱

【题解-洛谷】B3644 【模板】拓扑排序 / 家谱树 有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。给出每个人的后代的信息。输出一个序列,使得每个人的后辈都比那个人后列出。输出一个序列,使得每个人的后辈都比那个人后列出。如果有多种不同的序列,输出任意一种即可。),表示家族的人数。 阅读详情

家谱
描述
家谱:又称族谱、宗谱等。是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书。皇帝的家谱称玉牒,如新朝玉牒、皇宋玉牒。它以记载父系家族世系、人物为中心,由正史中的帝王本纪及王侯列传、年表等演变而来。

家谱是一种特殊的文献,就其内容而言,是中国五千年文明史中具有平民特色的文献,记载的是同宗共祖血缘集团世系人物和事迹等方面情况的历史图籍。家谱属珍贵的人文资料,对于历史学、民俗学、人口学、社会学和经济学的深入研究,均有其不可替代的独特功能。

这一天小白拿到了自己家的家谱,小白便想知道自己家的家谱中,每位祖先有多少孩子(他孩子的孩子也是他的孩子)。但是家族历史源远流长,家谱实在太庞大了,自己一个人完全数不过来。热心的你便自告奋勇帮小白写一个程序,来统计每位祖先他有多少孩子。

输入
输入的第一行有一个整数 n(1 ≤ n ≤ 100000),表示家谱中总共的人数。

然后有 n-1行,每行有两个整数 x(1 ≤ x ≤ n), y(1 ≤ y ≤ n)表示 x 是 y 的父亲。

输出
输出 n 行,每行有一个整数,表示第 i 个人他有多少孩子。

输入样例 1
4
1 2
1 3
2 4
输出样例 1
3
1
0
0

手续:

  • 使用DFS来将整个节点处理。

  • 将起子节点的数量给存到数组里,处理。

  • 没有父节点的就是祖先根节点。

代码手续:

1.用动态数组来储存起值:

vector<int> a[100010];//动态数组的定义
int father[100010];
int sons[100010];

2.算儿子的数量:(核心)

void dfs(int u){
	for (int i=0;i<a[u].size();i++){
		int v=a[u][i];
		dfs(v);
		sons[u]+=sons[v]+1;//算儿子的数量,放到sons数组里面
	}
}

3.动态数组输入:

for (int i=1;i<n;i++){
		int x,y;
		cin >> x>>y;
		father[y] = x;
		a[x].push_back(y);
	}

到了这里就复杂起来了,你要搞清楚哪个点对应什么,父节点如何分配。
4.处理节点:

int u;
	for (int i=1;i<n;i++){
		if (father[i]==0){
			u=i;//没有父节点的就是祖先根节点
		}
	}
	dfs(u);

程序到了这里,基本上就结束了,另外的就需要输出儿子的你那一份。
代码:

#include <bits/stdc++.h>
using namespace std;
vector<int> a[100010];//动态数组的定义
int father[100010];
int sons[100010];
void dfs(int u){
	for (int i=0;i<a[u].size();i++){
		int v=a[u][i];
		dfs(v);
		sons[u]+=sons[v]+1;//算儿子的数量,放到sons数组里面
	}
}
int main(){
	int n;
	cin >> n;
	
	for (int i=1;i<n;i++){
		int x,y;
		cin >> x>>y;
		father[y] = x;
		a[x].push_back(y);
	}
	int u;
	for (int i=1;i<n;i++){
		if (father[i]==0){
			u=i;//没有父节点的就是祖先根节点
		}
	}
	dfs(u);
	for (int i=1;i<=n;i++){
		cout << sons[i]<<endl;//输出
	}
	return 0;
}
【题解】P2814 家谱 题目 题目背景 现代的人对于本家族血统越来越感兴趣。 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先。 输入格式 输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用 #name 的形式描写一组父子关系中的父亲的名字,用 +name 的形式描写一组父子关系中的儿子的名字;接下来用 ?name 的形式表示要求该人的最早的祖先;最后用单独的一个 $ 表示文件结束。 输出格式 按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式为:本人的名 阅读详情

相关推荐

题解:AcWing 1253 家谱

输入文件由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name 的形式描写一组父子关系中的儿子的名字;题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式:本人的名字+一个空格+祖先的名字+回车。现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。本文分享的必刷题目是从。

团爸讲算法 658

计蒜客家谱(dfs求直系后代数

计蒜客家谱(dfs求直系后代数) 这一天蒜头君拿到了自己家的家谱,蒜头君便想知道,在自己家的家谱中,每位祖先有多少直系后代(直系后代包括他的孩子和他孩子的直系后代)。但是家族历史源远流长,家谱实在太庞大了,自己一个人完全数不过来。热心的你便自告奋勇帮蒜头君写一个程序,来统计每位祖先有多少直系后代。 输入格式 输入的第一行有一个整数 n(1≤n≤100000),表示家谱中的总人数。 接下来读入 n−1 行,每行有两个整数 x(1≤x≤n), y(1≤y≤n),表示 x 是 y 的父母。 输出格式 输出 n 行

L_halley的博客 432

题解:AcWing 1191 家谱树

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。输出一个序列,使得每个人的孩子都比那个人后列出。输出一个序列,使得每个人的孩子都比那个人后列出;数据保证一定有解,如果有多解输出任意一解。给出每个人的孩子的信息。本文分享的必刷题目是从。

团爸讲算法 869

YCOJ家谱

题目: Description 家谱:又称族谱、宗谱等。是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书。皇帝的家谱称玉牒,如新朝玉牒、皇宋玉牒。它以记载父系家族世系、人物为中心,由正史中的帝王本纪及王侯列传、年表等演变而来。 家谱是一种特殊的文献,就其内容而言,是中国五千年文明史中具有平民特色的文献,记载的是同宗共祖血缘集团世系人物和事迹等方面情况的历史图籍。家谱属珍贵的人文资料,对...

全机房最蒟蒻的博客 489

P2814 家谱题解【并查集的查】

现代的人对于本家族血统越来越感兴趣。

NJU phd 在读。 636

ExcelVBA家谱表(可生成世系图)

ExcelVBA编写的家谱表,虽不如WinApp桌面程序漂亮,但是符合录谱人员的需求,实用为主。本次上传修正了一些以前的错误。

数组归并

描述 有两个数组A={a1,a2,...,an}, B={b1,b2,...,bm}。 其中a1<=a2<=...<=an, b1<=b2<=...<=bm, 要求将其合并为一个更大的有序数组,并且去除重复元素。 输入 第一行输入一个整数t,表示测试数据的组数。 对于每组测试数据,第一行输入两个整数n、m。分别代表数组A和B的长度。第二行输入n个整数,代表A的各个元素。第三行输入m个整数,代表B的各个元素。 1<=n,m<=100000. 输出 对

Knight_Ren的博客 1018

真正可用的Excel家谱录入表,要生成漂亮的世系图,含测试数据。

去年我发布了生成世系图的改进版,现在我把自己真正使用的家谱录入表发布出来,供大家参考。表中使用的家族成员数据是真实的,只是为避免泄漏个个隐私,把所有姓名都改成了字母和数字。 此表中的家族成员约1.48万,生成一次世系全图约需几十秒(看电脑配置了)。右侧家族树可以随意点选,点那个名字,就自动查询并以此名字为录入起点。任何时候点“世系图生成”都自动从当前起点生成之后家族世系图。第17行是一些选项,可选择世次范围、繁简模式、录入、校对模式。其中父系、母系功能刚开始修改,尚未完成母系功能。 这个表的界面可能比不上专门的Windows应用程序,但实用性绝对比那些专有程序高。至少我自己是实在受不了那种拍脑代编出来的程序后,才专门给自己做了这个家谱录入表,用来完成本家族的家谱整理、录入事宜。

抓住那头牛

题目描述 农夫约翰已经获悉逃跑的牛的位置,想立刻抓住它。 农夫的位置在直线上的N (0 ≤ N ≤ 100,000)点,牛在同一直线上的 K (0 ≤ K ≤ 100,000)点,约翰有步行和闪移两种走法。 步行:农夫约翰可以一分钟从点X走到X-1或X+1点 闪移:农夫约翰可以一分钟从点X走到2*X点 假设奶牛并没有意识被追,还在站在原地,农夫约翰需要多少步,才能把奶牛逮住? 样例输入 5 17 样例输出 4 代码: #include<iostream> #inclu.

a64661616161的博客 787

Excel VBA 高效快速生成家谱世系图

制作这个VBA之前,我参考过“聚宝瓶”家谱制作。针对其缺点,彻底重写了VBA,改进如下: 1.生成世系图的过程改为由下至上,从而达到了简化逻辑的效果。 2.紧密位图。若无必要,家族成员间不插入空列。 3.尽可能使用数组操作,减少直操作Excel表,加快速度。 4.代码中包含删除空白列的功能(以数组操作实现)。 经实际测试,在我的机器上,家族成员为1500时,“聚宝瓶”生成世系全图约需30分钟,而下面这个改进后 的VBA,家族成员为6500人时,生成世系全图只需1分钟。 注意: 1.为简化逻辑,子号与行号相同,且数据已经按世次、家族成员编码排序。 2.家族成员编码包含每个人从始祖到自己的排行信息,请用公式生或VBA生成(表中前3行含公式)。 3.测试数据与族谱表结构完全相同,是一个完全真实的家谱,因隐私原因,姓名全部改成了“测试”。 4.由于Excel2003有256列的列宽限制,所以此代码必须在Office2007以上版本运行。 5.代码中注释了打印设置相关的内容,必须接有打印机的才能使用相关控制。 长夜飞翔 2015.7.17

数据结构_家谱_文件实现

数据结构课程相关,家谱的文件实现,内部有相关PPT展示和基本文档介绍模板

2018年蓝桥杯C++省赛B组 【H:日志统计】【模拟】

题目描述 小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。 其中每一行的格式是:ts id。表示在ts时刻编号id的帖子收到一个"赞"。 现在小明想统计有哪些帖子曾经是"热帖"。 如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。 具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。 给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。 输入 第一行包含三个整数N、D和

ln2037的博客 335

数据结构课程设计-家谱-树形输出.zip

C++数据结构课程设计-家谱族谱管理系统-真树形输出 家谱用于记录某家族历代家族成员的情况与关系。本课程设计要求设计并实 现一个计算机软件,支持对家谱的存储、更新、查询、统计等操作。 A)家庭成员信息存储:将每个家庭成员的基本信息存储在计算机中(可永久 保存)。家庭成员的基本信息至少应包括: (姓名,出生地,出生日期,死亡日期,性别,身高,学历,职业,最高职 务/职称,…); B)家族关系存储:将各家庭成员之间的关系,存储在计算机中(可永久保存); C)更新:家谱数据的更新(修改、删除、加入);D)输出:将家谱以较友好 的格式输出(显示); E)查询:按基本信息查询成员,按亲戚关系查询; 增强要求 A)统计:统计并打印(显示)结果,统计的项目有:平均寿命、平均身高、 男女比例、家庭平均人口、平均(最高/低)学历、… …

C++题解 P2288 家谱(gen)

C++题解P2288家谱问题的解法,核心在于通过哈希处理字符串实现并查集操作。将字符串转换为唯一编号后,使用并查集维护家族关系。哈希函数采用字母ASCII值作为T进制位,通过取模运算确保唯一性。代码实现了字符串哈希、并查集查询合并等操作,处理'#'、'+'、'?'三种指令分别对应设置祖先、合并集合和查询祖先功能。该方法避免了map的高时间复杂度,通过数组直接存储字符串与编号的映射关系,提高了查询效率。

2301_81641926的博客 538

2024“华为杯”中国研究生数学建模竞赛(A题)深度剖析_数学建模完整过程+详细思路+代码全解析

目标是优化风力涡轮机的功率调度,使其在给定的实时风速数据下,最小化涡轮机关键组件(如塔架和主轴)的疲劳损伤。问题的挑战在于,考虑通信延迟和测量噪声的同时,要确保功率输出与风速变化的响应快速且准确。

2401_82549447的博客 6630

Streamlit(九) widgets-input

st.text_input / st.number_input / st.date_input / st.time_input 源码路径:${python}\Lib\site-packages\streamlit\elements\text_widgets.py(number_input.py, time_widgets.py) st.text_input st.text_input(label, value="", max_chars=None, key=None,\

heianduck的博客 3354

洛谷题解——P2814 家谱

题目相关 题目链接 洛谷,https://www.luogu.com.cn/problem/P2814。 MYOJ,http://47.110.135.197/problem.php?id=5344。 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先。 输入格式 输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用 #name 的形式描写一组父子关系中的父亲的名字,用 +name 的形式描写一组父子关系中的儿子的名字;接下来用

努力中的老周的专栏 649

UE5 Paper2D性能优化:GroupedSpriteSceneProxy合批渲染原理与实践

在游戏开发中,渲染性能优化是核心技术挑战之一,其核心原理在于减少CPU与GPU之间的通信开销,特别是降低Draw Call数量。Draw Call是CPU向GPU提交绘制命令的指令,每次调用都涉及状态切换和数据传输,当场景中存在大量同质化对象时,频繁的Draw Call会成为主要性能瓶颈。为此,现代图形引擎普遍采用合批渲染技术,其技术价值在于将多个共享相同渲染状态(如材质、几何体)的物体数据合并提交,从而将多次Draw Call压缩为一次或少数几次,显著提升渲染效率。这一技术在2D游戏开发中尤为重要,例如在

weixin_34198453的博客 395

【USACO题库】2.3.2 Cow Pedigrees奶牛家谱 题解

本文探讨了计算满足特定条件的二叉树数量问题。给定节点数N和高度K,要求计算所有节点度数为0或2(即每个节点要么是叶子,要么有两个子节点)的不同二叉树的数量,结果对9901取模。 通过动态规划方法解决:使用二维数组dp[i][j]表示i个节点、高度不超过j的树的数量。初始化dp[1][j]=1,然后通过三重循环递推计算,最后用dp[N][K]-dp[N][K-1]得到恰好高度为K的树的数量。 样例输入5个节点、高度3时输出2,对应两种不同结构的二叉树。算法时间复杂度为O(N²K),适用于N≤200,K≤100

cjm0230_yyds的博客 343

手把手教你使用YOLOv11模型,训练自己数据集,百分百成功(无废话)

YOLOV11百分百成功训练自己的数据集并进行图像、视频流脚本预测

chenhenGzzz的博客 1953

【AUTOSAR-E2E】-2.1-配置E2E:基于E2EPW配置一个RX接收的Signal Group(使用E2E Profile 2)

《共13页精讲》:此法也适用于E2E Profile 4/5/6/7/11/22 目录 1 检查CAN Matrix Arxml/DBC是否满足E2E需求 2 在DaVinci Developer中为Port添加E2E保护 3 在DaVinci Configurator settings设置 4 如何使用应用层的E2E保护 5 结尾 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--

「汽车电子助手」的博客 4417

洛谷:B3644 【模板】拓扑排序 / 家谱树Java题解

拓扑排序是处理有向无环图排序问题的有效方法,特别适合解决依赖关系、任务调度等问题。理解其基于入度的处理方式和队列的应用是掌握该算法的关键。本题通过家族辈分关系的具体场景,很好地展示了拓扑排序的实际应用。

Java爱好者,热爱分享,信仰开源! 498

从零开始讲DDR(7)——modelsim独立仿真DDR4

本文主要内容为DDR4 MIG ip核仿真,modelsim独立仿真DDR4。在进行DDR仿真的时候,我们会面临一个以往常规仿真不存在的问题:DDR本身并不是一个我们通过RTL代码设计出来的部件,常规的模块或者IP仿真,都是基于RTL代码就能进行的,但是回顾一下我们DDR的开发流程,调用的IP核也只是MIG ip,其本质是一个DDRC+DDRPYH的组合,并不能模拟任何DDR本身的行为,因此,在进行仿真之前,我们首先要做的就是获取DDR的仿真模型。

apple_53311083的博客 3226

AcWing 1191. 家谱树 题解(拓扑排序)

拓扑排序建立一个队列,遍历所有点,将度数为1的点全部加入队列中,之后队内元素依次出队,对出队的点遍历所有临边,将这些临点的入度–,如果临点的入度为0,则加入队列中,重复遍历下去,直到队列为空。...

qiaodxs的博客 473

芯片标称具备8kVESD能力却在8kV测试中失效?

芯片级ESD(HBM模型)与系统级ESD(IEC 61000-4-2)存在本质差异:

硬核科技 647

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

985小水博的摸鱼日常 3091
上一篇: 题解-【拓扑排序】威虎山上的分配
下一篇: 二分图
Cancelleds
博客等级 码龄8年 1110粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值