el blog de referencia: https: //blog.csdn.net/daixinliangwyx/article/details/90300400
Un super memoria. . . . . . (Disponible consejo Kazajstán)
Dirijo el tema presentado por: http://oj.ecustacm.cn/problem.php?id=1400
#include <iostream> #include <cstring> #include <vector> #include <cola> #include <algoritmo> usando espacio de nombres std; const int L = 100009 ; vector < int > niño [L]; vector < int > datos [L]; int N, Q; vector < int > GetChild ( int nodo) { para ( int i = 0 ; i <data [nodo] .size (); i ++ ) { vector < int > CHS = GetChild (datos [nodo] [i]); niño [nodo] .Insert (niño [nodo] .end (), chs.begin (), chs.end ()); } Niño [nodo] .push_back (nodo); volver niño [nodo]; } Int main () { int P, S; mientras que (~ scanf ( " % d% d " , y N, y Q)) { para ( int i = 1 ; i <N; i ++ ) { scanf ( " % d% d " , & p, & s); datos [p] .push_back (s); } Infantil [ 1] = GetChild ( 1 ); para ( int i = 1 ; i <= Q; i ++ ) { scanf ( " % d% d " , y p, & s); vector < int > :: iterator it = find (niño [p] .begin (), hijo [p] .end (), s); si (es =! niño [p] .end ()) { cout << " SÍ " << endl; } Demás { cout << " NO " << endl; ( Int i = 0 ; i <L; i ++ ) { datos [i] .clear (); niño [i] .clear (); } } Volver 0 ; }
............