Pyth, 17 16 bytes
.e-.|f}k@QTUQYkQk@QTUQbkQ Try it online: DemonstrationDemonstration or +"Q.e-.|f}k@QTUQYkQ&input="Test+Cases:"[][[0]][[],[0,1]][[0,1],[]][[0,1],[0],[1,0,3],[]][[3],[],[5],[3],[1,3],[4]][[0,1],[6],[],[3],[3],[1],[4,2]][[6],[0,5,1],[5,4],[3,5],[4],[5,6],[0,3]][[1,0],[5,1],[5],[1],[5,7],[7,1],[],[1]][[2,8,0,9],[5,2,3,4],[0,2],[3,7,4],[8,1,2],[5,1,9,2],[6,9],[6,5,2,9,0],[9,1,2,0],[3,9]]&debug=0" rel="nofollow noreferrer">Test Suite+"Q.e-.|f}k@QTUQbkQ&input="Test+Cases:"[][[0]][[],[0,1]][[0,1],[]][[0,1],[0],[1,0,3],[]][[3],[],[5],[3],[1,3],[4]][[0,1],[6],[],[3],[3],[1],[4,2]][[6],[0,5,1],[5,4],[3,5],[4],[5,6],[0,3]][[1,0],[5,1],[5],[1],[5,7],[7,1],[],[1]][[2,8,0,9],[5,2,3,4],[0,2],[3,7,4],[8,1,2],[5,1,9,2],[6,9],[6,5,2,9,0],[9,1,2,0],[3,9]]&debug=0" rel="nofollow noreferrer">Test Suite
Explanation
implicit: Q = input .e Q enumerated mapping of Q (k index, Yb out-neighbors): f UQ filter [0, 1, ..., len(Q)-1] for elements T, which satisfy: }k@QT k in Q[T] # this are the in-neighbors .| Yb setwise union with Yb - k remove k