#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int N;
int vis[ 10000 ] ;
int deg[ 10000 ] ;
vector< int > lf;
vector< int > rg;
void solve( int n) {
vis[ n] ++ ;
if ( vis[ n] ! = 1 ) {
return ;
}
if ( lf[ n] >= 0 ) {
solve( lf[ n] ) ;
}
if ( rg[ n] >= 0 ) {
solve( rg[ n] ) ;
}
}
class Solution{
public :
bool validateBinaryTreeNodes( int n, vector< int > & leftChild, vector< int > & rightChild) {
int i;
N = n;
lf = leftChild;
rg = rightChild;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
vis[ i] = deg[ i] = 0 ;
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( lf[ i] >= 0 ) {
deg[ lf[ i] ] ++ ;
}
if ( rg[ i] >= 0 ) {
deg[ rg[ i] ] ++ ;
}
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( deg[ i] == 0 ) {
break ;
}
}
if ( i== N) {
return false ;
}
solve( i) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( vis[ i] ! = 1 ) {
return false ;
}
}
return true ;
}
}
;
// cLay varsion 20200227-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int N, vis[1d4], deg[1d4];
// vector<int> lf, rg;
//
// void solve(int n){
// vis[n]++;
// if(vis[n]!=1) return;
//
// if(lf[n]>=0) solve(lf[n]);
// if(rg[n]>=0) solve(rg[n]);
// }
//
// class Solution {
// public:
// bool validateBinaryTreeNodes(int n, vector<int>& leftChild, vector<int>& rightChild) {
// N = n;
// lf = leftChild;
// rg = rightChild;
// rep(i,N) vis[i] = deg[i] = 0;
//
// rep(i,N){
// if(lf[i] >= 0) deg[lf[i]]++;
// if(rg[i] >= 0) deg[rg[i]]++;
// }
//
// rep(i,N) if(deg[i] == 0) break;
// if(i==N) return false;
//
// solve(i);
// rep(i,N) if(vis[i]!=1) return false;
//
// return true;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KaW50IE47CmludCB2aXNbMTAwMDBdOwppbnQgZGVnWzEwMDAwXTsKdmVjdG9yPGludD4gbGY7CnZlY3RvcjxpbnQ+IHJnOwp2b2lkIHNvbHZlKGludCBuKXsKICB2aXNbbl0rKzsKICBpZih2aXNbbl0hPTEpewogICAgcmV0dXJuOwogIH0KICBpZihsZltuXT49MCl7CiAgICBzb2x2ZShsZltuXSk7CiAgfQogIGlmKHJnW25dPj0wKXsKICAgIHNvbHZlKHJnW25dKTsKICB9Cn0KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGJvb2wgdmFsaWRhdGVCaW5hcnlUcmVlTm9kZXMoaW50IG4sIHZlY3RvcjxpbnQ+JiBsZWZ0Q2hpbGQsIHZlY3RvcjxpbnQ+JiByaWdodENoaWxkKXsKICAgIGludCBpOwogICAgTiA9IG47CiAgICBsZiA9IGxlZnRDaGlsZDsKICAgIHJnID0gcmlnaHRDaGlsZDsKICAgIGZvcihpPSgwKTtpPChOKTtpKyspewogICAgICB2aXNbaV0gPSBkZWdbaV0gPSAwOwogICAgfQogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIGlmKGxmW2ldID49IDApewogICAgICAgIGRlZ1tsZltpXV0rKzsKICAgICAgfQogICAgICBpZihyZ1tpXSA+PSAwKXsKICAgICAgICBkZWdbcmdbaV1dKys7CiAgICAgIH0KICAgIH0KICAgIGZvcihpPSgwKTtpPChOKTtpKyspewogICAgICBpZihkZWdbaV0gPT0gMCl7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmKGk9PU4pewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBzb2x2ZShpKTsKICAgIGZvcihpPSgwKTtpPChOKTtpKyspewogICAgICBpZih2aXNbaV0hPTEpewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMjAwMjI3LTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gaW50IE4sIHZpc1sxZDRdLCBkZWdbMWQ0XTsKLy8gdmVjdG9yPGludD4gbGYsIHJnOwovLyAKLy8gdm9pZCBzb2x2ZShpbnQgbil7Ci8vICAgdmlzW25dKys7Ci8vICAgaWYodmlzW25dIT0xKSByZXR1cm47Ci8vIAovLyAgIGlmKGxmW25dPj0wKSBzb2x2ZShsZltuXSk7Ci8vICAgaWYocmdbbl0+PTApIHNvbHZlKHJnW25dKTsKLy8gfQovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgYm9vbCB2YWxpZGF0ZUJpbmFyeVRyZWVOb2RlcyhpbnQgbiwgdmVjdG9yPGludD4mIGxlZnRDaGlsZCwgdmVjdG9yPGludD4mIHJpZ2h0Q2hpbGQpIHsKLy8gICAgIE4gPSBuOwovLyAgICAgbGYgPSBsZWZ0Q2hpbGQ7Ci8vICAgICByZyA9IHJpZ2h0Q2hpbGQ7Ci8vICAgICByZXAoaSxOKSB2aXNbaV0gPSBkZWdbaV0gPSAwOwovLyAKLy8gICAgIHJlcChpLE4pewovLyAgICAgICBpZihsZltpXSA+PSAwKSBkZWdbbGZbaV1dKys7Ci8vICAgICAgIGlmKHJnW2ldID49IDApIGRlZ1tyZ1tpXV0rKzsKLy8gICAgIH0KLy8gCi8vICAgICByZXAoaSxOKSBpZihkZWdbaV0gPT0gMCkgYnJlYWs7Ci8vICAgICBpZihpPT1OKSByZXR1cm4gZmFsc2U7Ci8vIAovLyAgICAgc29sdmUoaSk7Ci8vICAgICByZXAoaSxOKSBpZih2aXNbaV0hPTEpIHJldHVybiBmYWxzZTsKLy8gCi8vICAgICByZXR1cm4gdHJ1ZTsKLy8gICB9Ci8vIH07Cg==