The first line of input contains an integer 'T' representing the number of test cases. Then the test cases follow.
The first line of each test case contains an integer ‘N’ and ‘E’ representing the number of nodes and edges in the graph.
The next ‘E’ lines of each test case contain two single space-separated integers denoting ‘EDGES[i][0]’ and ‘EDGES[i][1]’ which is a directed edge from node ‘EDGES[i][0]’ to ‘EDGE[i][1]’.
For each test case, print the safe nodes in sorted order.
The output for each test case is printed in a separate line.
You do not need to print anything; it has already been taken care of. Just implement the given function.
1 <= T <= 100
1 <= N <= 10 ^ 4
1 <= E <= 10 ^ 4
0 <= EDGE[i][0] and EDGE[i][1] < N
Where ‘EDGE[i][0]’ and ‘EDGE[i][1]’ represents the directed edge.
Time Limit: 1 sec
The idea behind this approach is we try to find if there is a cycle from the node we start. If we are able to find it, then we will mark that node and remove it, and if we cannot reach it, then after some number of steps, we'll stop.
A node will be ultimately safe if all of its outgoing edges to nodes are safe.
We start with the nodes with zero outgoing edges, which are already safe.
We can consider any node which is only pointing to safe nodes.
Then, we can update those nodes again, and so on, we do this for all the nodes.
Here is the complete algorithm:
The idea behind this approach is the same as discussed in the previous approach but this time we use DFS to find the cycle in the graph. If we encounter the node for the first time we mark it visited and assign 1 to it. If we encounter a node that is already processed i.e: is assigned 1 means there is a cycle and we will not include those nodes in our answer.
Here is the complete algorithm:
Plantation
COUNT ISLANDS
Capturing Grid
Rotting Oranges
Distance to a Cycle in Undirected Graph