Strongly connected components P90865


Statement
 

pdf   zip

A directed graph G=(V,A)G = (V, A) consists of a set of vertices VV and a set of arcs AA. An arc is an ordered pair (u,v)(u, v), where u,vVu, v \in V. A path from a vertex vi1v_{i_1} to a vertex vikv_{i_k} is a sequence of arcs (vi1,v12),(vi2,vi3),,(vik1,vik)(v_{i_1}, v_{1_2}), (v_{i_2}, v_{i_3}), \dots, (v_{i_{k-1}}, v_{i_k}). By definition, there is always a path from every vertex to itself.

Consider the following equivalence relation: two vertices uu and vv of GG are related if, and only if, there is a path from uu to vv and a path from vv to uu. Every equivalence class resulting from this definition is called a strongly connected component of GG.

Given a directed graph, calculate how many strongly connected components it has.

Input

Input begins with the number of cases. Each case consists of the number of vertices nn and the number of arcs mm, followed by mm pairs (u,v)(u, v). Vertices are numbered starting at 0. There are not repeated arcs, nor self-arcs (v,v)(v, v). Assume 1n1041 \le n \le 10^4.

Output

For every graph, print its number of strongly connected components.

Public test cases
  • Input

    3
    
    3 3
    0 1  1 2  2 0
    
    7 7
    0 1  1 2  2 0  3 4  4 6  6 3  0 6
    
    6 7
    0 1  0 2  1 3  2 3  3 4  4 2  5 4
    

    Output

    Graph #1 has 1 strongly connected component(s).
    Graph #2 has 3 strongly connected component(s).
    Graph #3 has 4 strongly connected component(s).
    
  • Information
    Author
    Xavier Martínez
    Language
    English
    Official solutions
    C++ Python
    User solutions
    C++ Python