My code for this problem from Hacker Cup Round 2 is working just fine on Sample Input but its not giving any output on Validation Input.
My approach: First, find all possible candidates for an answer (the ones with frequencies more than the number of leaves). Apply a BFS starting from leaves, and then, for each "possible candidate/topic," I will compute DP(node, topic). The value of DP is 0 when a partition of the subtree node exists such that we need one "topic", 1 when a partition of the subtree node exists such that we need no "topic", and -1 if "topic" can't be the answer. The answer would be $$$\sum_{x \in topics} {(dp(1, x) == 1)}$$$
Code
Your program needs too much time.
Consider a tree that is just a line. It will only have one leave. So every topic will be a candidate. And for every node in the tree you will iterate over all topics. Which will take too long, if there are 1,000,000 nodes and 8,000,000 topics. (Also it will probably not fit into memory).
Oh, I see. I guess I'll have to handle the computation for the node with a single child separately. Is that correct? Is there any optimization you can suggest?
The official solution uses the same approach as you. There you can find the optimization you need to make.
Ok. Thanks for the help.