Process vertices in reverse topological order. This ensures you know the outcome of all successors before processing a vertex. Use a boolean array to mark winning positions. Initialize vertices with no outgoing edges as losing (false).
Then iterate in reverse topological order. For each vertex, iterate through outgoing edges. If any edge leads to a losing position, mark the current vertex as winning. Otherwise, it is losing.