L2-2 小字辈 (25 分)

本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。

输入格式:

输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。

输出格式:

首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。

输入样例:

9
2 6 5 5 -1 5 6 4 7

输出样例:

4
1 9
原始做法是以叶子节点往上查 由于时限为400ms所以不可取
#include<bits/stdc++.h>
using namespace std;
int s[100000 + 10], p[100000 + 10];
int main() {
	//freopen("in.txt", "r", stdin);
	int n;
	memset(p, 0, sizeof(p));
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &s[i]);
		if (s[i] != -1)
			p[s[i]] = 1;
	}
	int ad = 1, ans[100000 + 10],m=0;
	for (int i = 1; i <= n; i++) {
		if (!p[i]) {
			int t = 1, a = i;
			while (s[a] != -1) {
				t++;
				a = s[a];
			}
			if (ad < t) {
				ad = t;
				m = 0;
				ans[m++] = i;
			}
			else if (ad == t)
				ans[m++] = i;
		}
	}
	if (ad == 1) printf("1\n1\n");
	else {
		printf("%d\n%d", ad,ans[0]);
		for (int i = 1; i < m; i++)
			printf(" %d", ans[i]);
	}
	return 0;
}

  这是用根的方法

#include<bits/stdc++.h>
using namespace std;
#define maxn 100000 + 10
vector<int>s[maxn];
int ans[maxn], f, ad = 1, m = 0;
void dfs(int x, int d) {
	int n = s[x].size();
	if (n == 0) {
		if (ad < d) {
			ad = d;
			m = 0;
			ans[m++] = x;
		}
		else if (ad == d)
			ans[m++] = x;

	}
	else
		for (int i = 0, t; i < n; i++) {
			dfs(s[x][i], d + 1);
		}

}
int main() {
	//freopen("in.txt", "r", stdin);
	int n;
	scanf("%d", &n);
	for (int i = 1, t; i <= n; i++) {
		scanf("%d", &t);
		if (t == -1)
			f = i;
		else
			s[t].push_back(i);
	}
	dfs(f, 1);
	if (ad == 1) printf("1\n1\n");
	else {
		printf("%d\n%d", ad, ans[0]);
		for (int i = 1; i < m; i++)
			printf(" %d", ans[i]);
	}
	return 0;
}

  




原文链接: https://www.cnblogs.com/gongyanyu/p/10480038.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    L2-2 小字辈 (25 分)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/290999

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午1:17
下一篇 2023年2月15日 下午1:18

相关推荐