Advertisement
Guest User

Even tree

a guest
Jul 21st, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. class List
  4. {
  5. private:
  6.     int* list;
  7.     int reserved;
  8.     int size;
  9.     int increase = 20;
  10.     void resize()
  11.     {
  12.         int* temp = new int[reserved + increase];
  13.         for (int i=0; i < size; i++)
  14.             temp[i] = list[i];
  15.         delete [] list;
  16.         list = temp;
  17.         reserved += increase;
  18.     }
  19. public:
  20.     List()
  21.     {
  22.         reserved = 10;
  23.         size = 0;
  24.         list = new int[reserved];
  25.     }
  26.     void add(int element)
  27.     {
  28.         if (size < reserved - 5)
  29.             resize();
  30.         list[size] = element;
  31.         size++;
  32.     }
  33.     int getSize()
  34.     {
  35.         return size;
  36.     }
  37.     int getElement(int n)
  38.     {
  39.         return list[n];
  40.     }
  41.     void show()
  42.     {
  43.         cout << endl;
  44.         for (int i=0; i<size; i++)
  45.             cout << list[0] << " ";
  46.         cout << endl;
  47.     }
  48. };
  49.  
  50. struct node
  51. {
  52.     int number;
  53.     int father;
  54.     List kids;
  55. };
  56.  
  57. int count = 0;
  58.  
  59. int getKids(node* nodes, int start = 0)
  60. {
  61.     int kids = nodes[start].kids.getSize();
  62.     int kid;
  63.     int branchKids;
  64.     int test;
  65.     for (int i=0; i< nodes[start].kids.getSize(); i++)
  66.     {
  67.         kid = nodes[start].kids.getElement(i);
  68.         branchKids = getKids(nodes, nodes[kid].number);
  69.         test = branchKids + 1;
  70.         if (test > 0 && test %2 == 0)
  71.             count++;
  72.         kids += branchKids;
  73.     }
  74.     return kids;
  75. }
  76.  
  77.  
  78. int main() {
  79.     /* Enter your code here. Read input from STDIN. Print output to STDOUT */
  80.     int nodes;
  81.     int edges;
  82.     cin >> nodes;
  83.     cin >> edges;
  84.     node* node_list = new node[nodes];
  85.     for (int i=0; i < nodes; i++)
  86.     {
  87.         node_list[i].number = i;
  88.         node_list[i].father = 0;
  89.     }
  90.     int first;
  91.     int second;
  92.     int kid;
  93.     int father;
  94.     for (int edge=0; edge<edges; edge++)
  95.     {
  96.         cin >> first;
  97.         cin >> second;
  98.         kid = (first > second)? first:second;
  99.         father = (first > second)? second:first;
  100.         node_list[father-1].kids.add(kid-1);
  101.         node_list[kid-1].father = father-1;
  102.        
  103.     }
  104.     int kids = 0;
  105.     kids = getKids(node_list);
  106.     cout << count;
  107.     return 0;
  108.     for (int i=0; i < nodes; i++)
  109.     {
  110.         cout << "Node #" << node_list[i].number << " Father is " << node_list[i].father  << " kids are: \n";
  111.         for (int j=0; j < node_list[i].kids.getSize(); j++)
  112.             cout << node_list[i].kids.getElement(j)<< " ";
  113.         cout << endl;
  114.     }
  115.    
  116.        
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement