家谱

题目:
在这里插入图片描述
在这里插入图片描述
代码如下:

#include<bits/stdc++.h>
using namespace std;
#define MAX 100005
int n,f[MAX],u[MAX],v;
vector<int> a[MAX];
int dfs(int x)
{
	int res = 0;
	for(int i = 0;i < a[x].size();i++) res += dfs(a[x][i]);
	f[x] = res;
	return f[x] + 1;//他的子孙
}
int main()
{
	int x,y;
	cin >> n;
	for(int i = 0;i < n - 1;i++){
		cin >> x >> y;
		a[x].push_back(y);
		u[y] = 1;
	}
	for(int i = 1;i <= n;i++){
		if(u[i] == 0){
			v = i;	//找到祖宗 
			break;
		}
	} 
	dfs(v); 
	for(int i = 1;i <= n;i++) cout << f[i] << endl;
	return 0;
}

这题可以用dfs去完成,输入的时候采用vector来保存(也就是邻接表的保存方法)。在从多人当中没当过儿子的才是父结点,找到父结点开始进行bfs。每个人的子孙数量用数组f[]保存,递归过程中每次return需要另加其自己,最后打印f[i].

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【功能介绍】 1.该族谱管理系统一改以往修谱系统的特点,增加了输出word文档的功能,方便在打印前对出谱资料的二次修改,具有很强的可修改性。另外,可以将族人图形资料输出到word文档,和族人资料一起一并打印。可以打印输出族人的图形等可见信息。 2.可以在数据库内保存家族和族人的语音、视频、扫描资料等重要资料,由于保存在数据库内,所以具有保密性。家谱资料在数据库内可以删除、查看,方便整个家族资料的管理和完备性。 3.可以将世系树的结构输出到文本文档,对于家族的分支结构在树上得到很好的诠释。由于文本文档不具有格式性, 所以可以输出无限大的世系图,可以将整个家族的世系图完整输出 。 4.具有输出部分世系图分支的功能,可以分段输出世系图,便于将世系图分段保存和管理。配合整个世系图和分段世系图,对于某一分支可以了解自家分支的世系全貌。 5.可以管理多个配偶信息,配偶信息的输出是附加在族人后面,对于家庭的完整性得到很好的体现。配偶信息资料全,可以了解配偶在自家的排行、兄弟姐妹等情况。 6.自定义家谱输出格式,方便输出古代的五代格式。五代输出按大排行方式输出,符合大家的排行习惯。 7.族人输出按照大排行的顺序输出,例子老大的儿子输出要排在老二儿子的前边, 老大的孙子输出也要排在老二孙子的前边,以此类推。 8.可以管理家族的历史事件,历史人物,可以任意增加历史事件和历史人物,来阐述家族曾经出得辉煌。增加的人物和事件无限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值