Veri

Time limit: 1.6s Memory limit: 256MB Input: veri.in Output: veri.out

Se dă un graf orientat cu nn noduri și mm muchii. Fiecare muchie are costul 11 (poate fi parcursă într-un minut). Doi „prieteni” (veri) pornesc din nodul SS. Unul dintre ei vrea să ajungă în nodul AA, iar celălalt vrea să ajungă în nodul BB.

Cei doi prieteni se vor plimba împreună până când ciclează, adică până când vor ajunge în același nod a doua oară, notat cu ZZ. După ciclare, ei își pot continua drumurile separat. Totuși, dacă vor, pot să meargă amândoi în continuare pe același drum: doar dispare obligația de a merge împreună.

Fiecare dintre ei trebuie să-și termine drumul doar după ciclare, adică după ce nu mai sunt obligați să meargă împreună. Totuși, este în regulă dacă drumul unuia se termină exact în nodul în care au ciclat (adică ciclează în AA sau BB).

Care este numărul minim de minute necesar astfel încât să fie posibil ca amândoi să ajungă la destinațiile lor, în timpul alocat, în AA, respectiv BB?

Cu alte cuvinte, dacă cei doi veri ciclează pentru prima oară după exact tt minute, apoi își continuă drumurile pentru alte tAt_A, respectiv tBt_B minute, vrem să aflăm valoarea minimă a lui max(t+tA,t+tB)max(t + t_A, t + t_B).

Există două tipuri de cerințe, reprezentate printr-un număr cc:

  • Dacă c=1c = 1, trebuie calculată valoarea minimă a lui max(t+tA,t+tB)max(t + t_A, t + t_B).
  • Dacă c=2c = 2, trebuie afișat un triplet de drumuri care poate fi urmat de cei doi veri (drumul comun din SS până în ZZ, drum urmat ulterior de primul văr din ZZ până în AA, drum urmat ulterior de al doilea văr din ZZ până în BB), astfel încât valoarea asociată drumurilor, adică max(t+tA,t+tB)max(t + t_A, t + t_B) să fie minimă. Orice triplet corect cu valoarea asociată minimă poate fi afișat.

Date de intrare

Pe prima linie se găsește cc. Pe a doua linie se găsesc doi întregi nn și mm. Pe a treia linie se găsesc trei întregi SS, AA și BB.

Pe următoarele mm linii se găsesc câte doi întregi XX și YY, reprezentând că există o muchie direcționată de la nodul XX la nodul YY, care poate fi parcursă într-un minut (de cost 11).

Date de ieșire

Dacă c=1c = 1, afișați un singur număr, valoarea minimă a lui max(t+tA,t+tB)max(t + t_A, t + t_B).

Dacă c=2c = 2, afișati trei drumuri. Primul drum este format de la SS până la ZZ. Al doilea drum este format de la ZZ până la AA. Al treilea drum este format de la ZZ până la BB, unde SS, AA, BB, ZZ sunt definite anterior.

Fiecare drum se va tipări pe două linii separate:

  • Pe prima linie va apărea lungimea drumului, adică numărul de muchii.
  • Pe a doua linie vor apărea nodurile drumului, separate prin câte un spațiu.

Valorea asociată drumurilor, adică max(t+tA,t+tB)max(t + t_A, t + t_B), trebuie să fie minimă.

Restricții și precizări

  • 1S,A,B,Zn5 0001 \leq S, A, B, Z \leq n \leq 5\ 000
  • Nodurile sunt numerotate de la 11 la nn.
  • ABA \neq B
  • 1mn×(n1)1 \leq m \leq n \times (n-1).
  • Se garantează că pentru orice test dat spre rezolvare există cel puțin o soluție.
  • Nu există muchii de la un nod la el însuși. Există maxim o muchie orientată între oricare două noduri distincte.
  • Dacă verii se despart în AA, primul văr poate să nu mai facă nimic (drumul lui ulterior ar avea 00 muchii și l-ar conține doar pe AA; vezi exemplul 3). Analog pentru BB.
  • Pentru fiecare subtask, testele cu c=1c = 1 vor conta pentru 60%60\% din punctaj.
  • Pentru 30 de puncte, n500n \leq 500, m=nm = n și toate muchiile sunt de forma i(i mod n)+1i \rightarrow (i\ mod\ n) + 1, unde i{1,...,n}i \in \{1, ..., n\}.
  • Pentru 50 de puncte, n500n \leq 500.
  • Pentru 20 de puncte, n5 000n \leq 5\ 000 și m4×nm \leq 4 \times n.

Exemplul 1

veri.in

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

veri.out

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



Drumul urmat în comun de cei doi este 1257651 \rightarrow 2 \rightarrow 5 \rightarrow 7 \rightarrow 6 \rightarrow 5. Drumul urmat de primul văr în continuare este 535 \rightarrow 3. Drumul continuat de al doilea văr este 5745 \rightarrow 7 \rightarrow 4. Astfel, primul văr are nevoie de 66 minute pentru a ajunge în AA, iar al doilea de 77 minute pentru a ajunge în BB, deci răspunsul pentru c=1c = 1 este 77. Cei doi ar fi putut să cicleze în 77, dacă ar fi urmat drumul 1257671 \rightarrow 2 \rightarrow 5 \rightarrow 7 \rightarrow 6 \rightarrow 7. Totuși, deși al doilea văr ar fi ajuns în BB în doar 66 minute (747 \rightarrow 4), primul văr ar fi avut nevoie de cel puțin 88 minute ca să ajungă în AA (76537 \rightarrow 6 \rightarrow 5 \rightarrow 3).

Exemplul 2

veri.in

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

veri.out

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



Răspunsul corect pentru c=1c = 1 este 88. Pentru acest exemplu există două soluții corecte. A doua soluție este tripletul de drumuri (136473, 32, 3645)(1 \rightarrow 3 \rightarrow 6 \rightarrow 4 \rightarrow 7 \rightarrow 3,\ 3 \rightarrow 2,\ 3 \rightarrow 6 \rightarrow 4 \rightarrow 5).

Exemplul 3

veri.in

2
5 6
1 3 5
1 2
2 3
3 4
4 3
3 1
3 5

veri.out

4
1 2 3 4 3
0
3
1
3 5



Răspunsul corect pentru c=1c = 1 este 55. Este folosit un ciclu care se termină în A=3A = 3.

Exemplul 4

veri.in

1
4 4
1 2 4
1 3
3 2
2 3
2 4

veri.out

5



Pentru c=2c = 2, singurul triplet corect de drumuri este (1323, 32, 324)(1 \rightarrow 3 \rightarrow 2 \rightarrow 3,\ 3 \rightarrow 2,\ 3 \rightarrow 2 \rightarrow 4).

Atenție! Tripletul (13232, 2, 24)(1 \rightarrow 3 \rightarrow 2 \rightarrow 3 \rightarrow 2,\ 2,\ 2 \rightarrow 4) este greșit, deoarece primul nod vizitat a doua oară nu este 22.

Log in or sign up to be able to send submissions!