#include <iostream>
#include <vector>
#include <array>
struct Node
{
int key;
std:: vector < Node> children;
// Node() { key = -1; } // root
Node( int k)
{
key = k;
}
void Add( Node n)
{
children.push_back ( n) ;
}
void display( )
{
std:: cout << "My value is " << key << std:: endl ;
std:: cout << "My " << children.size ( ) << " kid(s) are : " << std:: endl ;
for ( auto n : children)
{
n.display ( ) ;
}
}
} ;
int main( )
{
constexpr int numNode = 5 ; // for
std:: array < int , numNode> numbers = { 4 , - 1 , 4 , 1 , 1 } ;
std:: vector < Node> nodesStorage;
for ( int i = 0 ; i < numNode ; i++ )
{
nodesStorage.push_back ( Node( i) ) ;
}
nodesStorage.push_back ( Node( - 1 ) ) ;
for ( int i = 0 ; i< numNode ; i++ )
{
if ( numbers[ i] == - 1 ) // the root
{
nodesStorage[ numNode] .Add ( nodesStorage[ i] ) ;
}
else
{
nodesStorage[ numbers[ i] ] .Add ( nodesStorage[ i] ) ;
}
}
nodesStorage[ 1 ] .display ( ) ;
nodesStorage[ numNode] .display ( ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YXJyYXk+CgpzdHJ1Y3QgTm9kZSAKewoJaW50IGtleTsKCXN0ZDo6dmVjdG9yPE5vZGU+IGNoaWxkcmVuOwovLwlOb2RlKCkgeyBrZXkgPSAtMTsgfSAvLyByb290CglOb2RlKGludCBrKQoJewoJCWtleSA9IGs7Cgl9CgoJdm9pZCBBZGQoTm9kZSBuKQoJewoJCWNoaWxkcmVuLnB1c2hfYmFjayhuKTsKCX0KCQoJdm9pZCBkaXNwbGF5KCkKCXsKCQlzdGQ6OmNvdXQgPDwgIk15IHZhbHVlIGlzICIgPDwga2V5IDw8IHN0ZDo6ZW5kbDsKCQlzdGQ6OmNvdXQgPDwgIk15ICIgPDwgY2hpbGRyZW4uc2l6ZSgpICA8PCAiIGtpZChzKSBhcmUgOiAiIDw8IHN0ZDo6ZW5kbDsKCQlmb3IoIGF1dG8gbiA6IGNoaWxkcmVuKQoJCXsKCQkJbi5kaXNwbGF5KCk7CgkJfQoJfQoKfTsKCmludCBtYWluKCkKewoJY29uc3RleHByIGludCBudW1Ob2RlID0gNTsgLy8gZm9yIAoJc3RkOjphcnJheTxpbnQsIG51bU5vZGU+IG51bWJlcnMgPSB7IDQsIC0xLCA0LCAxLCAxIH07IAoJc3RkOjp2ZWN0b3I8Tm9kZT4gbm9kZXNTdG9yYWdlOwoKCWZvciAoaW50IGkgPSAwIDsgaSA8IG51bU5vZGUgOyBpKyspCgl7CgkJbm9kZXNTdG9yYWdlLnB1c2hfYmFjayhOb2RlKGkpKTsKCX0KCW5vZGVzU3RvcmFnZS5wdXNoX2JhY2soTm9kZSgtMSkpOyAKCglmb3IgKGludCBpID0gMCA7IGk8IG51bU5vZGUgOyBpKyspCgl7CgkJaWYobnVtYmVyc1tpXSA9PSAtMSkgLy8gdGhlIHJvb3QKCQl7CgkJCW5vZGVzU3RvcmFnZVtudW1Ob2RlXS5BZGQobm9kZXNTdG9yYWdlW2ldKTsKCQl9CgkJZWxzZQoJCXsKCQkJbm9kZXNTdG9yYWdlW251bWJlcnNbaV1dLkFkZChub2Rlc1N0b3JhZ2VbaV0pOwoJCX0KCX0KCglub2Rlc1N0b3JhZ2VbMV0uZGlzcGxheSgpOwoJbm9kZXNTdG9yYWdlW251bU5vZGVdLmRpc3BsYXkoKTsKCglyZXR1cm4gMDsKCn0KCgo=