International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
GARDEN
Portuguese 1.5
Tropical Garden
Somhed, um botânico, leva regularmente grupos de estudantes para passear num dos maiores
jardins tropicais da Tailândia. O jardim é composto de N fontes (numeradas 0, 1,..., N-1) e M trilhas
(caminhos). Cada trilha conecta um par diferente de fontes distintas, e pode ser percorrida em
qualquer direção. Há pelo menos uma trilha partindo de cada fonte. Essas trilhas passam por lindas
coleções botânicas que Somhed gostaria de ver. Cada grupo pode iniciar seu passeio em qualquer
fonte.
Somhed adora belas plantas tropicais. Portanto, em qualquer fonte ele e seus estudantes vão tomar a
trilha mais bonita que parte dessa fonte, a menos que essa seja a trilha tomada mais recentemente e
exista uma trilha alternativa. Nesse caso, eles irão tomar a segunda trilha mais bonita. Obviamente,
se não há alternativa, eles vão voltar, percorrendo a mesma trilha uma segunda vez. Note que como
Somhed é um botânico profissional, ele não considera duas trilhas igualmente bonitas.
Seus estudantes não têm muito interesse em plantas. No entanto, eles adorariam almoçar em um
restaurante especial localizado na fonte P. Somhed sabe que seus estudantes vão ter fome após
percorrer exatamente K trilhas, onde K pode ser diferente para cada grupo de estudantes. Somhed
se pergunta quantas rotas distintas ele poderia escolher para cada grupo, dado que:
• cada grupo pode iniciar em qualquer fonte;
• trilhas sucessivas devem ser escolhidas como descrito acima; e
• a rota de cada grupo deve terminar na fonte P após percorrer exatamente K trilhas.
Note que eles podem passar pela fonte P antes do final de sua rota, embora ainda necessitem
terminar sua rota na fonte P.
Sua tarefa
Dada a informação sobre fontes e trilhas, você deve encontrar as respostas para Q grupos distintos
de estudantes; isto é, Q valores de K.
Escreva um procedimento count_routes(N,M,P,R,Q,G) que tem os seguintes parâmetros:
 N – o número de fontes. As fontes são numeradas de 0 a N-1.
 M – o número de trilhas. As trilhas são numeradas de 0 a M-1. As trilhas serão dadas em
ordem decrescente de beleza: para 0 ≤ i < M-1, a trilha i é mais bonita do que a trilha i+1.
 P – a fonte na qual se localiza o restaurante especial.
 R – um vetor bidimensional representando as trilhas. Para 0 ≤ i < M, a trilha i conecta as
fontes R[i][0] e R[i][1]. Lembre que cada trilha liga um par de fontes distintas, e nenhum
par de trilhas liga o mesmo par de fontes.
 Q – o número de grupos de estudantes.
 G – um vetor unidimensional de inteiros contendo os valores de K. Para 0 ≤ i < Q, G[i] é o
número de trilhas K que o i-ésimo grupo deve percorrer.
Para 0 ≤ i < Q, seu procedimento deve encontrar o número de rotas possíveis com exatamente G[i]
trilhas que o grupo i poderia percorrer para chegar à fonte P. Para cada grupo i, seu procedimento
deve chamar o procedimento answer(X) para relatar que o número de rotas é X. As respostas devem
ser dadas na mesma ordem do que os grupos. Se não há rotas válidas, seu procedimento deve dar a
resposta X=0.
Page 1 of 3
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
GARDEN
Portuguese 1.5
Exemplos
Exemplo 1
Considere o caso mostrado na Figura 1, onde N=6,
M=6, P=0, Q=1, G[0]=3, e
1
0
0
R=
3
4
1
2
1
3
4
5
5
Note que as trilhas são listadas na ordem
decrescente de beleza. Ou seja, a trilha 0 é a mais
bonita, a trilha 1 é a segunda mais bonita, e assim
por diante.
Figura 1.
Há apenas duas rotas válidas possíveis de comprimento 3:
 1 → 2 → 1 → 0, e
 5 → 4 → 3 → 0.
A primeira rota inicia na fonte 1. A trilha mais bonita a partir desse ponto leva à fonte 2. Na fonte 2,
o grupo não tem escolha, devendo retornar utilizando a mesma trilha. De volta à fonte 1, o grupo
agora evita a trilha 0, por ser a mais recentemente utilizada, e escolhe a trilha 2. Esta trilha
realmente os leva à fonte P=0.
Portanto, o procedimento deve chamar answer(2).
Exemplo 2
Considere o caso mostrado na Figura 2, N=5, M=5, P=2,
Q=2, G[0]=3, G[1]=1, e
1
1
R= 3
1
4
0
2
2
3
2
Para o primeiro grupo, há apenas uma rota válida que chega à
fonte 2 em após percorrer 3 trilhas: 1 → 0 → 1 → 2.
Figura 2.
Para o segundo grupo, há duas rotas válidas que chegam à fonte 2 após percorrer 1 trilha: 3 → 2, e 4
→ 2.
Portanto, a implementação correta de count_routes deve primeiro chamar answer(1) para relatar a
resposta para o primeiro grupo, e então chamar answer(2) para relatar a resposta para o segundo
grupo.
Page 2 of 3
International Olympiad in Informatics 2011
22–29 July 2011, Pattaya City, Thailand
Competition Tasks – Day 1
GARDEN
Portuguese 1.5
Subtarefas
Subtarefa 1 (49 pontos)
 2 ≤ N ≤ 1 000
 1 ≤ M ≤ 10 000
Q=1
 cada elemento de G é um inteiro entre
1 e 100, inclusive.
Subtarefa 3 (31 pontos)
 2 ≤ N ≤ 150 000
 1 ≤ M ≤ 150 000
 1 ≤ Q ≤ 2 000
 cada elemento de G é um inteiro entre 1 e
1 000 000 000, inclusive.
Subtarefa 2 (20 pontos)
 2 ≤ N ≤ 150 000
 1 ≤ M ≤ 150 000
Q=1
 cada elemento de G é um inteiro entre
1 e 1 000 000 000, inclusive.
Detalhes de implementação
Limites
 Tempo limite de CPU : 5 segundos
 Limite de memória: 256 MB
Nota: Não há limite explícito para o tamanho da memória de pilha. Memória de pilha é
contada no total de memória utilizada.
Interface (API)
 Diretório de implementação: garden/
 Para ser implementado pelo competidor: garden.c ou garden.cpp ou garden.pas
 Interface do competidor: garden.h ou garden.pas
 Interface do corretor: gardenlib.h ou gardenlib.pas
 Exemplo de corretor: grader.c ou grader.cpp ou grader.pas
 Exemplo de entrada para o corretor: grader.in.1, grader.in.2, ...
Nota: O exemplo de corretor lê a entrada no seguinte formato:
 Linha 1: N, M, e P.
 Linhas 2 a M+1: descrição das trilhas; i.e., Linha i+2 contém R[i][0] e R[i][1],
separados por um espaço, para 0 ≤ i < M.
 Linha M+2: Q.
 Linha M+3: vetor G como uma sequência de inteiros separados por espaços.
 Linha M+4: vetor de soluções esperadas como uma sequencia de inteiros separados
por espaços.
 Saída esperada para a entrada exemplo do corretor: grader.expect.1, grader.expect.2, ...
Para esta tarefa, cada um desses arquivos deve conter precisamente o texto “Correct”.
Page 3 of 3
Download

GARDEN Tropical Garden