Heres the problem, and my attempted solution.

My solution:
1. Run a topological sort on the tree, which runs in linear time BigTheta(E+V) where E is the number of edges and V the number of vertices. This puts it in a linked list which also takes constant time.
2. A vertex u would be an ancestor if it has a higher finishing time than vertex v.
3. Look at the 2 vertice’s in the linked list and compare their finishing time and return true or false depending on the result from step 2.
Does this sound correct or am i missing something?
I don’t think your understanding of what “constant time” means is quite correct. “…time BigTheta(E+V) where E is the number of edges and V the number of vertices” is linear time, not constant time.
Granted, you are allowed to take linear time for the pre-processing, so that’s ok, but how are you going to do your step 3 (“Look at the 2 vertice’s in the linked list”) in constant time?