Dona Minhoca
Dona Minhoca
Dona Minhoca
Sênior
Gabriel A. G. Sales1 , Pedro E. Santana1 , Guthyerri A. Barbosa1 , Davi S. Freitas1 ,
Wladimir A. Tavares1
1
Universidade Federal do Ceara – Campus Quixadá (UFC)
Av. José de Freitas Queiroz, 5003 – Cedro, Quixadá – CE, 63902-580
{gabriel.alsamir, pedroems, galexandrino, davidossantosfreitas}@alu.ufc.br,
wladimirufc@gmail.com
Abstract. This paper analyzes and describes a solution to the “Dona Minhoca”
problem present in Phase 3 of the Senior Level of the 2021 Olı́mpiada Brasileira
de Informática (OBI2021). The aim is to achieve an efficient solution that meets
the requirements of consumed memory and maximum execution time required
by the question. For this, an adapted use of a Depth-first Search Algorithm is
made. Finally, the performance of the solution is presented.
Resumo. Este artigo analisa e descreve uma solução para o problema “Dona
Minhoca” presente na Fase 3 do Nı́vel Sênior da Olimpı́ada Brasileira de In-
formática de 2021 (OBI2021). O intuito é alcançar uma solução eficiente que
atenda às exigências de memória consumida e tempo de execução máximo exigi-
das pela questão. Para isso, faz-se uso adaptado de um Algoritmo de Busca em
Profundidade. Por fim, é apresentada a performance da solução.
1. Introdução
A Olimpı́ada Brasileira de Informática (OBI) é uma competição de programação
que, seguindo os moldes das demais olimpı́adas cientı́ficas de conhecimento, visa des-
pertar o interesse dos alunos pelo estudo da lógica matemática, ciência da computação
e programação [SBC 2022]. Realizada anualmente pela Sociedade Brasileira de
Computação (SBC) e organizada pelo Instituto de Computação da Unicamp desde 1999,
a Olimpı́ada é dividida em Modalidade Iniciação e Modalidade Programação (a qual o
problema aqui descrito pertence). Durante a competição, os competidores devem colo-
car os problemas em ordem de dificuldade, deduzir requisitos dos problemas, construir
casos de testes e propor uma solução algorı́tmica que resolva os problemas conforme os
limites de tempo e memória propostos pelos elaboradores dos problemas. Dessa forma,
cada problema exige conhecimento prático e teórico dos alunos, além de criatividade e
capacidade de adaptar algoritmos conhecidos para os desafios em questão.
Nesse sentido, o presente trabalho tem por objetivo trazer um estudo tanto teórico
quanto prático do problema “Dona Minhoca”, presente na Fase 3 da XXIII OBI, em
2021, no Nı́vel Sênior. Para resolver o problema, precisamos contar quantos caminhos
de tamanho máximo existem em uma árvore.
2. Fundamentação Teórica
Um grafo simples G é um par ordenado G = (V (G), E(G)), composto por um
conjunto finito V (G) = {1, 2, . . . , n}, cujos elementos são chamados de vértices, e por
um conjunto de pares não ordenados E(G) ⊆ {{u, v} : u, v ∈ V, u ̸= v}, cujos ele-
mentos são chamados de arestas. A partir de agora, vamos representar o conjunto {u, v}
simplesmente por uv ou vu. Definimos por n = |V (G)| e m = |E(G)|. Os vértices
u, v ∈ V (G) são chamados adjacentes (ou vizinhos) se uv ∈ E(G) e não-adjacentes se
uv ̸∈ E(G). O conjunto dos vizinhos de um vértice v é denotado por N (v). O grau de
um vértice v em um grafo G, denotado por dG (v), corresponde ao número de vizinhos de
v no grafo G, isto é |N (V )|.
Dado um grafo G, um caminho de u até w em G é uma sequência de vértices e
arestas partindo de u até w. Um grafo é dito conexo se existe um caminho entre qualquer
par de vértice. Um caminho de v até v é ciclo se todas as arestas são distintas e somente o
vértice v aparece duas vezes. Um grafo é dito acı́clico quando não contém nenhum ciclo.
Um grafo conexo e acı́clico é chamado de árvore. Um vértice é chamado de folha quando
o seu grau é igual a 1.
A prova apresentada neste artigo pode ser encontrada neste link 1 . Antes de provar
a corretude do algoritmo 1, vamos analisar a estrutura da árvore. Podemos representar o
diâmetro em uma linha. Cada vértice nó no diâmetro será a raiz de uma árvore. É fácil
mostrar que a altura de cada componente com a raiz é no máximo a distância da raiz do
componente até a extremidade mais próxima do diâmetro. Por exemplo, se d(d, c) ≥
d(a, d) então o diâmetro da árvore seria d(c, b).
Teorema 2. Para cada nó i, seja o nó j tal que dist(i, j) seja máximo, então j = a ou
j=b
• Se j = j1 (suponha que j1 não está no mesmo componente de i; suponha sem
perda de generalidade que j1 está mais próximo de a do que de b), dist(i, j1) =
dist(i, r) + dist(r, j1) ≤ dist(i, r) + dist(r, a) = dist(i, a). Então, j = a.
1
https://codeforces.com/blog/entry/101271
• Se j = j2 (j2 está no mesmo componente de i), dist(i, j1) ≤ dist(i, r) +
dist(r, j1) ≤ dist(i, r) + dist(r, a) = dist(i, a). Então, j = a.
Teorema 3. dist(a,b) é o diâmetro do grafo G.
Proof. Suponha que dist(u,v) seja um diâmetro. Pelo teorema anterior, a e b são os
nós mais distantes de qualquer nó, ou seja, dist(u, a) ≥ dist(u, v) ou dist(u, b) ≥
dist(u, v). Vamos supor sem perda de generalidade que dist(u, b) ≥ dist(u, v). Obtemos
dist(a, b) ≥ dist(u, b) ≥ dist(u, v), então dist(a,b) é um diâmetro de G.
3. Descrição do Problema
Dona Minhoca construiu uma bela casa, composta de N salas conectadas por N-
1 túneis. Cada túnel conecta exatamente duas salas distintas, e pode ser percorrido em
qualquer direção. A casa de dona Minhoca foi construı́da de modo que, percorrendo os
túneis, é possı́vel partir de qualquer sala e chegar a qualquer outra sala da casa. Dona
Minhoca quer se exercitar, e para isso planeja construir um túnel adicional, de modo a
criar um ”ciclo” de salas e túneis. Vamos chamar de comprimento do ciclo o número
de salas do ciclo. A figura (a) abaixo mostra um exemplo de casa. É possı́vel obter
um ciclo de comprimento três construindo um túnel entre as salas 2 e 5, ou um ciclo de
comprimento quatro construindo um túnel entre as salas 1 e 3 [OBI 2022].
6. Agradecimentos
Agradecemos ao nosso orientador, Wladimir, e ao Paulo Miranda, finalista da
Maratona de Programação pela UFC Quixadá, pela ajuda e motivação.
References
OBI (2022). Pratique - dona minhoca. https://olimpiada.ic.unicamp.br/
pratique/ps/2021/f3/minhoca/. Acesso em: 01 out. 2022.
SBC (2022). Olimpiada brasileira de informática. https://www.sbc.org.br/
eventos/competicoes-cientificas/7-obi-evento. Acesso em: 25
set. 2022.