Advertisement
-LIR-

tairos

Feb 25th, 2020
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4.  
  5. #define MODULO 1000000007
  6. using namespace std;
  7.  
  8. ifstream in("tairos.in");
  9. ofstream out("tairos.out");
  10.  
  11. typedef struct
  12. {
  13.     int nod1, nod2;
  14. } muchie;
  15.  
  16. unsigned long nr_noduri, nivel;
  17. bool Graf[101][101];
  18. unsigned long NivelNod[101];
  19. unsigned long NrNoduriNivel_Initial[101]; /// Numarul de noduri pe fiecare nivel in graful dat
  20. unsigned long NrNoduriNivel_Infinit[10201]; /// Numarul de noduri pe fiecare nivel in graful infinit
  21. unsigned long NrNoduriFinaleNivel_Initial[10201]; /// Numarul de noduri finale pe fiecare nivel in grafului dat
  22. unsigned long NrNoduriFinaleNivel_Infinit[10201]; /// Numarul de noduri finale pe fiecare nivel in grafului dat
  23.  
  24. void Citire()
  25. {
  26.     cin >> nr_noduri >> nivel;
  27.  
  28.     int n1, n2;
  29.     for( int i=1 ; i<=nr_noduri-1 ; i++ )
  30.     {
  31.         cin >> n1 >> n2;
  32.         Graf[n1][n2] = Graf[n2][n1] = 1;
  33.     }
  34. }
  35.  
  36. void DFSGasireNivel(int nod_actual, int nivel_actual)
  37. {
  38.     NivelNod[nod_actual] = nivel_actual;
  39.     NrNoduriNivel_Initial[nivel_actual]++;
  40.     NrNoduriNivel_Infinit[nivel_actual]++;
  41.  
  42.     bool este_nod_final = true;
  43.     for( int i=2 ; i<=nr_noduri ; i++ )
  44.         if( Graf[nod_actual][i] == 1 && NivelNod[i] == 0 )
  45.         {
  46.             este_nod_final = false;
  47.             DFSGasireNivel(i,nivel_actual+1);
  48.         }
  49.  
  50.     if( este_nod_final == true )
  51.     {
  52.         NrNoduriFinaleNivel_Initial[nivel_actual]++;
  53.         NrNoduriFinaleNivel_Infinit[nivel_actual]++;
  54.     }
  55.  
  56. }
  57.  
  58. int main()
  59. {
  60.     Citire();
  61.     DFSGasireNivel(1,0);
  62.  
  63.     for( int i=1 ; i<=nivel ; i++ )
  64.     {
  65.         for( int j=1 ; j<=nr_noduri ; j++ )
  66.         {
  67.             NrNoduriFinaleNivel_Infinit[i+j] = ( NrNoduriFinaleNivel_Infinit[i+j] + ( NrNoduriFinaleNivel_Initial[j]*NrNoduriFinaleNivel_Infinit[i] % MODULO ) ) % MODULO ;
  68.             NrNoduriNivel_Infinit[i+j] = ( NrNoduriNivel_Infinit[i+j] + ( NrNoduriNivel_Initial[j]*NrNoduriFinaleNivel_Infinit[i] % MODULO ) ) % MODULO ;
  69.         }
  70.         NrNoduriFinaleNivel_Infinit[i] = 0;
  71.     }
  72.  
  73.     cout << NrNoduriNivel_Infinit[nivel];
  74.  
  75.  
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement