L2-026 小字輩 (25分)
本題給定一個龐大家族的家譜,要請你給出最小一輩的名單。
輸入格式:
輸入在第一行給出家族人口總數 N(不超過 100 000 的正整數) —— 簡單起見,我們把家族成員從 1 到 N 編號。隨後第二行給出 N 個編號,其中第 i 個編號對應第 i 位成員的父/母。家譜中輩分最高的老祖宗對應的父/母編號為 -1。一行中的數字間以空格分隔。
輸出格式:
首先輸出最小的輩分(老祖宗的輩分為 1,以下逐級遞增)。然後在第二行按遞增順序輸出輩分最小的成員的編號。編號間以一個空格分隔,行首尾不得有多餘空格。
輸入樣例:
9
2 6 5 5 -1 5 6 4 7
輸出樣例:
4
1 9
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100001;
int MAX=0;
vector<int> ve[MAXN];
struct node {
int ceng,num;//分別為輩分 和編號
vector<int>ve;//儲存自己的孩子
};
vector<node> t;//儲存輩分最小的編號
bool cmp(node a,node b){
return a.num<b.num;
}
//構建一個樹
//在構造樹的過程中計算題目要求求的量
void fff(int root){
queue<node> q;
node temp;
temp.ceng=1;
temp.num=root;
t.push_back(temp);
//將最高輩分入隊
q.push(temp);
while(!q.empty()){
node now=q.front();
q.pop();
MAX=max(MAX,now.ceng);//記錄最小輩分
for(int i=0;i<ve[now.num].size();i++){
int x=ve[now.num][i];
temp.num=x;
temp.ceng=now.ceng+1;//孩子的輩分等於父母輩分加一
temp.ve=ve[x];
q.push(temp);
//如果當前的輩分和t裡面存的最小輩分相同
//則入隊
if(temp.ceng==t[0].ceng) {
t.push_back(temp);
}
//如果不相同則說明t裡面存的不是最小輩分
//清空t 並且把temp加入
else{
t.clear();
t.push_back(temp);
}
}
}
}
int main(){
int n;
int root;//記錄最高輩分
scanf("%d",&n);
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
if(x!=-1)ve[x].push_back(i);// 記錄x的孩子
else root=i;//記錄最高輩分
}
fff(root);
printf("%d\n",MAX);
sort(t.begin(),t.end(),cmp);// 把最小輩分的編號排序
for(int i=0;i<t.size();i++){
if(i==0) printf("%d",t[i].num);
else printf(" %d",t[i].num);
}
return 0;
}
相關文章
- 春遊 C++(半對)(最小字典序)C++
- 目前網頁最小字型以及字型壓縮網頁
- 是否一輩子僅靠技術生存
- UWP學習——來自前輩們的經驗
- 讓手機應用“長輩版”更貼心RCC
- 為什麼軟體測試不能幹一輩子?
- 你這輩子最引以為傲的是什麼?
- 我真的要做一輩子的程式設計師嗎?程式設計師
- 近期的一些迷茫。希望得到各位前輩的解答
- 獲取字串的在html頁面上的寬度並且若文字過長則縮小字型填充字串HTML
- 趣談裝飾器模式,讓你一輩子不會忘模式
- 求各位前輩幫忙看看連表查詢字首問題
- 毛澤東誕辰126週年|緬懷先輩 接力前行
- 測試同學難道要寫一輩子的hello world?
- 邦芒寶典:職場前輩的6條經驗之談
- 老一輩開發者,與 23 歲網遊的「中年危機」
- 35 歲前端轉不轉管理 這 5 個前輩告訴你前端
- 去阿里,是不可能的,這輩子都不可能的阿里
- redux、mobx、concent特性大比拼, 看後生如何對局前輩Redux
- redux、mbox、concent特性大比拼, 看後生如何對局前輩Redux
- 財務自由的機會,你這輩子錯過了多少個?
- 程式設計師們 不要想一輩子靠技術混飯吃程式設計師
- 老程式設計師肺腑忠告:千萬別一輩子靠技術生存!程式設計師
- 正經人一輩子都用不到的 JavaScript 方法總結 (二)JavaScript
- 正經人一輩子都用不到的 JavaScript 方法總結 (一)JavaScript
- 緬懷先輩 奮發前行 | 清明祭掃創始人王江民墓
- 《無名之輩》為什麼讓我覺得若有所思?
- Excel必備快捷鍵,花一分鐘記起來,受益一輩子Excel
- VGChartz:任天堂Switch銷量達8169萬部 已超過其前輩GBAGC
- 如何真正的學會,學好python,5分鐘?8個月?一輩子?Python
- 26歲,轉行Python,是這輩子最成功的一件事......Python
- 千兆網路卡晶片對比:後起之秀和江湖前輩,誰更優秀?晶片
- 日常練習:寫了個grpc 連線池,希望各位前輩能提下意見RPC
- 遊戲佳作輩出的2023年,卻有上萬名開發者被裁員遊戲
- 程式設計師職場起點6要素 前輩們那些經歷告訴你程式設計師
- 大家好,希望各位前輩給予新人一些職業發展的建議
- 《馬力歐醫生世界》首月成績出爐,整體表現不及其他前輩
- 前輩經歷告訴你Python新手好找工作嗎?初級崗位多不多Python