Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class List
- {
- private:
- int* list;
- int reserved;
- int size;
- int increase = 20;
- void resize()
- {
- int* temp = new int[reserved + increase];
- for (int i=0; i < size; i++)
- temp[i] = list[i];
- delete [] list;
- list = temp;
- reserved += increase;
- }
- public:
- List()
- {
- reserved = 10;
- size = 0;
- list = new int[reserved];
- }
- void add(int element)
- {
- if (size < reserved - 5)
- resize();
- list[size] = element;
- size++;
- }
- int getSize()
- {
- return size;
- }
- int getElement(int n)
- {
- return list[n];
- }
- void show()
- {
- cout << endl;
- for (int i=0; i<size; i++)
- cout << list[0] << " ";
- cout << endl;
- }
- };
- struct node
- {
- int number;
- int father;
- List kids;
- };
- int count = 0;
- int getKids(node* nodes, int start = 0)
- {
- int kids = nodes[start].kids.getSize();
- int kid;
- int branchKids;
- int test;
- for (int i=0; i< nodes[start].kids.getSize(); i++)
- {
- kid = nodes[start].kids.getElement(i);
- branchKids = getKids(nodes, nodes[kid].number);
- test = branchKids + 1;
- if (test > 0 && test %2 == 0)
- count++;
- kids += branchKids;
- }
- return kids;
- }
- int main() {
- /* Enter your code here. Read input from STDIN. Print output to STDOUT */
- int nodes;
- int edges;
- cin >> nodes;
- cin >> edges;
- node* node_list = new node[nodes];
- for (int i=0; i < nodes; i++)
- {
- node_list[i].number = i;
- node_list[i].father = 0;
- }
- int first;
- int second;
- int kid;
- int father;
- for (int edge=0; edge<edges; edge++)
- {
- cin >> first;
- cin >> second;
- kid = (first > second)? first:second;
- father = (first > second)? second:first;
- node_list[father-1].kids.add(kid-1);
- node_list[kid-1].father = father-1;
- }
- int kids = 0;
- kids = getKids(node_list);
- cout << count;
- return 0;
- for (int i=0; i < nodes; i++)
- {
- cout << "Node #" << node_list[i].number << " Father is " << node_list[i].father << " kids are: \n";
- for (int j=0; j < node_list[i].kids.getSize(); j++)
- cout << node_list[i].kids.getElement(j)<< " ";
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement