Teleportgång
문제
Du sitter och programmerar när telefonen plötsligt ringer. Det är din kompis Erik som behöver hjälp med ett problem. Han sitter fast i en grotta med flera rum, där vissa par av rum är sammankopplade med gångar. Det tar en sekund att gå mellan två sammankopplade rum. Erik befinner sig i ett rum och vill veta hur snabbt han kan ta sig till utgången. "Lätt som en plätt" tänker du, och börjar skriva din favorit-kortaste-vägen-algoritm. Men då kommer du ihåg att Erik har en ovanlig förmåga, han kan nämligen teleportera sig.
Erik befinner sig på nod nummer i en oriktad graf med noder och kanter, och han vill ta sig till utgången vid nod nummer . På en sekund kan han antingen gå till en närliggande nod eller teleportera sig. Om han teleporterar sig hamnar han på en likformigt slumpmässig nod (dvs. sannolikheten är för alla noder). Din uppgift är att räkna ut den minsta möjliga genomsnittliga tid det tar för honom att ta sig till nod nummer . Med andra ord, du ska hitta det minsta väntevärdet.
Här kommer en kort introduktion till väntevärden. Låt oss säga att Erik har valt en viss strategi, och låt vara sannolikheten att han lyckas ta sig till nod på exakt sekunder om han följer strategin. Väntevärdet definieras som Om man väljer en dålig strategi (t.ex. att gå fram och tillbaka mellan två noder och aldrig komma fram) så kan väntevärdet bli oändligt stort. Det är dock alltid möjligt att uppnå ett ändligt väntevärde -- om man exempelvis teleporterar sig om och om igen så blir väntevärdet .
입력
Den första raden innehåller två heltal och ( , ). Den andra raden innehåller två heltal och ( , ): startnod och utgång. De följande raderna innehåller två heltal och ( , ), vilket betyder att en kant går mellan noderna och .
출력
Skriv ut ett tal: det minsta möjliga väntevärdet av tiden det tar att ta sig till utgången. Svaret anses korrekt om det har ett relativt eller absolut fel av högst .
예제
예제 1
8 6 2 4 1 2 2 3 3 4 4 5 4 6 7 8
2
예제 2
5 0 1 2
5
예제 3
4 2 4 2 1 2 2 3
2.0
예제 4
6 6 6 2 1 2 3 2 3 1 3 5 5 6 5 4
2.5