$1.$ A depth-first search of a directed graph always produces the same number of tree edges (i.e., independent of the order in which the vertices are provided and independent of the order of the adjacency list).

$2.$ Both DFS and BFS require $\Omega(n)$ storage for their operation.

$3.$ If we double the weight of every edge in the graph shortest path between any two vertices will not change.

$4.$ Dijkstra's algorithm may not terminate if the graph contains negative weight edges.

no i don't think mc_joshi here is correct! This staement "DFS on graph having many components covers only 1 component" it can never be true. when we run DFS algo, the loop covers all the vertex and in case of disconnected graph, we can always be sure that the component will always get visited even if it is disconnected. as forr loop will cover the disconnected component too because thta disconnected componenet is unmarked, and i agree with deabshish here. option a should be true.

mc_joshi, i want to ask you a counter ques. for sake of arg. , for 2 mins, forget any reasoning for this statement.

The first and foremost basic point is DFS is graph travrsing algo.right!!i.e we can traverse a graph using this algo. and traversing of graph is visiting each node once. it does not matter if graph is connected or not, the condition for any traversal graph is to traverse each node because this is algo's primary purpose which is why it is created . i have not seen that quora link but yeah it is true that DFS_VISIT funt(recursive one) inside the cde when we call, if graph is disconnected it will return after covering all the vertexes of that component but do remember DFS also contain an outer loop too which goes from 0 to v-1. it is added due to this case itself. if it would have been only the DFS visit procedure, you are right. but here we are talking of whole DFS algo, and it will run for all the vertex, and tree edges won't change. correct me if i am wrong!

Debasish, right but i just wanted to make point that simple DFS does not find no. of connected components, it finds yes or no by seeing visited array after DFS.

pikachu, According to me DFS on a graph means Simply using DFS() function, which spans to only $1$ component, and if it contains outer loop that (for all vertex if not visited apply DFS()) then necessarily all components are covered. Agree!!!

So, Our main disagreement is which one these two implementations is DFS()