feat: new graph problems formatted.
This commit is contained in:
31
quase-menor-caminho/statement/description.tex
Normal file
31
quase-menor-caminho/statement/description.tex
Normal file
@@ -0,0 +1,31 @@
|
||||
Encontrar o menor caminho entre dois pontos em um mapa é um problema clássico.
|
||||
Mas, em alguns sistemas de navegação, todas as rotas que fazem parte de algum
|
||||
menor caminho podem ficar congestionadas. Nesse caso, queremos encontrar uma rota
|
||||
alternativa.
|
||||
|
||||
O mapa é representado por um grafo direcionado e ponderado. Os vértices são
|
||||
pontos do mapa, e cada aresta direcionada representa uma rota de um ponto para
|
||||
outro com um certo comprimento.
|
||||
|
||||
O quase menor caminho entre a origem $S$ e o destino $D$ é o menor caminho de
|
||||
$S$ até $D$ que não usa nenhuma aresta pertencente a qualquer menor caminho de
|
||||
$S$ até $D$ no grafo original.
|
||||
|
||||
Sua tarefa é determinar o comprimento do quase menor caminho. Caso não exista
|
||||
nenhum caminho que satisfaça essa condição, a resposta deve ser $-1$.
|
||||
|
||||
Por exemplo, suponha que a figura abaixo representa o mapa dado, com círculos
|
||||
representando localizações e linhas representando rotas diretas, de mão única
|
||||
com as distâncias indicadas. O ponto de partida está marcado como $S$ e o de
|
||||
destino está marcado como $D$. As linhas em negrito pertencem a um caminho
|
||||
mínimo (nesse caso existem dois caminhos mínimos, cada um com extensão \(4\)).
|
||||
Logo, o quase menor caminho seria o indicado com linhas pontilhadas (extensão
|
||||
\(5\)), já que nenhuma rota entre dois pontos consecutivos pertence a nenhum
|
||||
caminho mínimo. Note que poderia existir mais de uma resposta possível, por
|
||||
exemplo, se a rota com extensão \(3\) tivesse extensão \(1\). Bem como poderia
|
||||
inexistir uma resposta certa.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[width=0.3\textwidth]{image.png}
|
||||
\end{figure}
|
||||
19
quase-menor-caminho/statement/input.tex
Normal file
19
quase-menor-caminho/statement/input.tex
Normal file
@@ -0,0 +1,19 @@
|
||||
A entrada contem varios casos de teste.
|
||||
|
||||
A primeira linha de cada caso contem dois inteiros $N$ e $M$
|
||||
($2 \leq N \leq 500$, $1 \leq M \leq 10^4$), representando o numero de
|
||||
vertices e o numero de arestas direcionadas do grafo. Os vertices sao numerados
|
||||
de $0$ a $N-1$.
|
||||
|
||||
A segunda linha contem dois inteiros $S$ e $D$
|
||||
($0 \leq S, D < N$, $S \neq D$), representando a origem e o destino.
|
||||
|
||||
Cada uma das proximas $M$ linhas contem tres inteiros $U$, $V$ e $P$
|
||||
($U \neq V$, $0 \leq U, V < N$, $1 \leq P \leq 1000$), indicando uma aresta
|
||||
direcionada de $U$ para $V$ com peso $P$.
|
||||
|
||||
Existe no maximo uma aresta direcionada de um vertice $U$ para um vertice $V$.
|
||||
A existencia de uma aresta de $U$ para $V$ nao implica a existencia de uma aresta
|
||||
de $V$ para $U$.
|
||||
|
||||
O fim da entrada e indicado por uma linha contendo \texttt{0 0}.
|
||||
9
quase-menor-caminho/statement/notes.tex
Normal file
9
quase-menor-caminho/statement/notes.tex
Normal file
@@ -0,0 +1,9 @@
|
||||
No primeiro caso da amostra, existem menores caminhos de custo $4$. Todas as
|
||||
arestas que aparecem em algum desses caminhos sao descartadas. Depois disso, o
|
||||
menor caminho restante tem custo $5$.
|
||||
|
||||
No segundo caso, todo caminho da origem ate o destino usa alguma aresta que
|
||||
pertence a um menor caminho original, entao a resposta e $-1$.
|
||||
|
||||
Problema adaptado do SPOJ Brasil:
|
||||
\href{https://br.spoj.com/problems/QUASEMEN/}{QUASEMEN - Quase Menor Caminho}.
|
||||
4
quase-menor-caminho/statement/output.tex
Normal file
4
quase-menor-caminho/statement/output.tex
Normal file
@@ -0,0 +1,4 @@
|
||||
Para cada caso de teste, imprima uma linha contendo um unico inteiro.
|
||||
|
||||
Se existir um quase menor caminho, imprima seu comprimento. Caso contrario,
|
||||
imprima $-1$.
|
||||
0
quase-menor-caminho/statement/preamble.tex
Normal file
0
quase-menor-caminho/statement/preamble.tex
Normal file
30
quase-menor-caminho/statement/tutorial.tex
Normal file
30
quase-menor-caminho/statement/tutorial.tex
Normal file
@@ -0,0 +1,30 @@
|
||||
Uma forma direta de resolver o problema e remover todas as arestas que pertencem
|
||||
a algum menor caminho original e, depois, calcular novamente o menor caminho.
|
||||
|
||||
Primeiro rodamos Dijkstra a partir de $S$ no grafo original, obtendo
|
||||
$distS[u]$, a menor distancia de $S$ ate cada vertice $u$. Em seguida rodamos
|
||||
Dijkstra no grafo reverso a partir de $D$, obtendo $distD[u]$, a menor
|
||||
distancia de $u$ ate $D$ no grafo original.
|
||||
|
||||
Se $distS[D]$ for infinito, nao existe caminho de $S$ ate $D$ e a resposta ja e
|
||||
$-1$.
|
||||
|
||||
Caso contrario, uma aresta direcionada $(u, v)$ de peso $p$ pertence a algum
|
||||
menor caminho de $S$ ate $D$ se, e somente se:
|
||||
|
||||
\[
|
||||
distS[u] + p + distD[v] = distS[D].
|
||||
\]
|
||||
|
||||
Essa igualdade diz que existe um menor caminho formado por um menor caminho de
|
||||
$S$ ate $u$, seguido pela aresta $(u, v)$, seguido por um menor caminho de $v$
|
||||
ate $D$. Portanto, marcamos todas as arestas que satisfazem essa condicao como
|
||||
removidas.
|
||||
|
||||
Por fim, rodamos Dijkstra mais uma vez a partir de $S$, ignorando as arestas
|
||||
removidas. A distancia obtida ate $D$ e o quase menor caminho; se ela for
|
||||
infinita, imprimimos $-1$.
|
||||
|
||||
Cada execucao de Dijkstra custa $O((N+M)\log N)$. Como usamos tres execucoes, a
|
||||
complexidade total por caso de teste e $O((N+M)\log N)$ em tempo e $O(N+M)$ em
|
||||
memoria.
|
||||
Reference in New Issue
Block a user