QOJ.ac

QOJ

Límite de tiempo: 4 s Límite de memoria: 256 MB Puntuación total: 100

#394. Metro

Estadísticas

Sieć ulic w Bytown składa się z $n$ skrzyżowań i $n-1$ dwukierunkowych ulic, z których każda łączy bezpośrednio parę skrzyżowań, przy czym każde skrzyżowanie jest osiągalne z każdego innego. Aby usprawnić ruch, burmistrz Byteasar chce zbudować system metra. W szczególności chce on wyznaczyć niektóre skrzyżowania jako stacje metra i położyć tory wzdłuż części ulic. Sieć metra powinna być spójna, co oznacza, że pociągi muszą mieć możliwość przejazdu między dowolnymi dwiema stacjami metra, być może przejeżdżając przez inne stacje po drodze.

Koszt budowy tuneli jest wysoki, ale koszt budowy stacji końcowych (tj. stacji, do których prowadzi tylko jeden tunel) jest jeszcze wyższy, ponieważ wymagają one dodatkowej infrastruktury do parkowania i serwisowania pociągów. Ze względów finansowych liczba stacji końcowych może wynosić co najwyżej $k$. Z drugiej strony, rozsądna sieć metra wymaga co najmniej dwóch takich stacji.

„Wskaźnik irytacji” pasażera to minimalna liczba ulic, które musi on pokonać, idąc pieszo z domu do najbliższej stacji metra. Burmistrz wymaga zaprojektowania sieci metra tak, aby zminimalizować maksymalny wskaźnik irytacji wszystkich pasażerów. Zakładamy, że na każdym skrzyżowaniu mieszkają pasażerowie.

Wejście

Pierwsza linia zawiera dwie liczby całkowite $n$ oraz $k$ ($n \ge 3, 2 \le k \le n$), oddzielone spacją, oznaczające odpowiednio liczbę skrzyżowań oraz maksymalną liczbę stacji końcowych. Skrzyżowania są ponumerowane od $1$ do $n$.

Kolejne $n-1$ linii zawiera po dwie liczby całkowite $a$ oraz $b$ ($1 \le a, b \le n, a \neq b$), oddzielone spacją, oznaczające, że skrzyżowania $a$ i $b$ są połączone bezpośrednio ulicą.

Wyjście

W pierwszej linii należy wypisać dwie liczby całkowite $r$ oraz $s$, oddzielone spacją, oznaczające odpowiednio minimalną wartość maksymalnego wskaźnika irytacji oraz liczbę stacji końcowych w tym projekcie (spełniającą $2 \le s \le k$). W drugiej linii należy wypisać $s$ różnych liczb całkowitych z zakresu od $1$ do $n$, odpowiadających numerom skrzyżowań, na których znajdują się stacje końcowe.

Spośród wszystkich projektów sieci należy w pierwszej kolejności wybrać ten, dla którego $r$ jest najmniejsze. W przypadku remisu, drugorzędnym celem jest zminimalizowanie $s$. Jeśli istnieje wiele projektów spełniających warunki minimalnego $r$ oraz minimalnego $s$, można wypisać dowolny z nich.

Przykład

Przykład 1

8 3
1 5
2 5
2 7
3 7
4 5
5 6
7 8

Wyjście 1

1 2
8 1

Uwagi

Sieć ulic przedstawiono na rysunku. Optymalny projekt sieci metra ma dwie stacje końcowe (zlokalizowane na skrzyżowaniach 1 i 8). Odpowiadający mu maksymalny wskaźnik irytacji pasażerów wynosi 1. Należy zauważyć, że istnieją inne optymalne projekty sieci metra spełniające $r=1$ oraz $s=2$. Istnieją również sieci z $r=1$ oraz $s=3$, ale nie są one optymalne.

Testy przykładowe

  • 1ocen: $n = 30, k = 29$, skrzyżowania $2, \dots, n$ są połączone ze skrzyżowaniem $1$.
  • 2ocen: $n = 5000, k = 4000$, skrzyżowania $1, 2, \dots, 2000$ tworzą ścieżkę, skrzyżowania $2001, \dots, 3500$ są połączone ze skrzyżowaniem $1$, a skrzyżowania $3501, \dots, 5000$ są połączone ze skrzyżowaniem $2000$.
  • 3ocen: $n = 2^{20} - 1, k = 1509$, skrzyżowania tworzą pełne drzewo binarne.

Podzadania

Zestaw testów składa się z następujących podzadań. Każde podzadanie może zawierać wiele punktów testowych. Jeśli program wypisze poprawnie tylko pierwszą linię, otrzyma 50% punktów za dany punkt testowy. Należy pamiętać, że program musi zakończyć się poprawnie i nie przekroczyć limitów czasu ani pamięci. Limity czasu dla poszczególnych podzadań są opublikowane na SIO.

Podzadanie Ograniczenia Punkty
1 $n \le 5000$ 30
2 $n \le 500\,000$ 40
3 $n \le 3\,000\,000$ 30

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.