1082 - Componentes Conexos

  • ID: 1082
  • IdBecrowd: 1082
  • Tags: estruturas-dados, grafos
  • Nível: 5
  • Tempo Limite: 1 segundos
  • Memória: 200 MB
  • Categoria: Grafos
  • Autor: Neilor Tonin, URI Brasil

Descrição

Com base nestas três definições:

Grafo conexo: Um grafo G(V,A) é conexo se para cada par de nodos u e v existe um caminho entre u e v. Um grafo com apenas um componente é um grafo conexo.

Grafo desconexo: Um grafo G(V,A) é desconexo se ele for formado por 2 ou mais componentes conexos.

Componente conexo: Componentes conexos de um grafo são os subgrafos conexos deste grafo.

O grafo a seguir possui 3 componentes conexos. O primeiro é formado pelos nodos a , b , c . O segundo é formado unicamente pelo nodo d e o terceiro componente é formado pelos nodos e , f .

Com base nestes conceitos, onde cada entrada fornecida que tem a identificação de cada um dos vértices, arestas e as ligações entre os vértices através destas arestas,  liste cada um dos componentes conexos que existem no grafo, segundo a entrada fornecida.

Entrada

A primeira linha do arquivo de entrada contém um valor inteiro N que representa a quantidade de casos de teste que vem a seguir. Cada caso de teste contém dois valores V e E que são, respectivamente, a quantidade de V értices e arestas ( E dges) do grafo. Seguem E linhas na sequência, cada uma delas representando uma das arestas que ligam tais vértices. Cada vértice é representado por uma letra minúscula do alfabeto ( ‘a’ - ‘z’ ), ou seja, cada grafo pode ter no máximo 26 vértices. Cada grafo tem no mínimo 1 componente conexo.

Obs: Os vértices de cada caso de teste sempre iniciam no ‘a’. Isso significa que um caso de teste que tem 3 vértices, tem obrigatoriamente os vértices ‘a’, ‘b’ e ‘c’.

Saída

Para cada caso de teste da entrada, deve ser apresentada uma mensagem Case #n: , onde n indica o número do caso de teste (conforme exemplo abaixo). Segue a listagem dos vértices de cada segmento, um segmento por linha, separados por vírgula (inclusive com uma virgula no final da linha). Finalizando o caso de teste, deve ser apresentada uma mensagem indicando a quantidade de componentes conexos do grafo (em inglês). Todo caso de teste deve ter uma linha em branco no final, inclusive o último caso de teste.

Obs: os nodos devem sempre ser apresentados em ordem crescente e se há caminho de a até b significa que há caminho de b até a.

Exemplos

Exemplo de Entrada

3

                                3 1

                                a c

                                10 10

                                a b

                                a c

                                a g

                                b c

                                c g

                                e d

                                d f

                                h i

                                i j

                                j h

                                6 4

                                a b

                                b c

                                c a

                                e f

Exemplo de Saída

Case #1:

                                a,c,

                                b,

                                2 connected components

                                Case #2:

                                a,b,c,g,

                                d,e,f,

                                h,i,j,

                                3 connected components

                                Case #3:

                                a,b,c,

                                d,

                                e,f,

                                3 connected components
Back to top