L2-026 小字辈 (25 分)

#include "iostream"
#include "cstring"
#include "algorithm"
using namespace std;
int table[100005]; // 初始数据,是树。
int ceng[100005]; // 层数
int solve(int val){
    
     // 返回层数
	if(val == -1) return ceng[val] = 0; // 如果未计算过,计算之
	if(ceng[val] != -1) return ceng[val];
	else return ceng[val] =(solve(table[val]) + 1);
}

int main(){
    
    
	memset(ceng, -1, 100005 * 4);
	memset(table, -1, 100005 * 4);
	int n;
	cin >> n;
	for(int i = 1; i <= n; ++i)
		cin >> table[i];
	int val = -1;
	for(int i = 1; i <= n; ++i)
		val = max(solve(i), val);
	cout << val << endl;
	for(int i = 1, count = 0; i <= n; ++i){
    
    
		if(ceng[i] == val) {
    
    
			if(count ++) cout << " ";
			cout << i;
		}
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33987764/article/details/113760527