|
|
|
|
@ -0,0 +1,74 @@ |
|
|
|
|
Zadania domowe z sortowania topologicznego i silinie spójnych składowych |
|
|
|
|
=== |
|
|
|
|
|
|
|
|
|
Rozwiązanie każdego zadania powinno być programem komputerowym. Ten progam powinien |
|
|
|
|
się budować poprzez system budowania `CMake` lub `make` na bossie. Jeśli w katalogu |
|
|
|
|
głównym Waszego repozytorium znajduje się plik `CMakeLists.txt`, użyję systemu `CMake`, |
|
|
|
|
jeśli nie - to systemu `make`. |
|
|
|
|
|
|
|
|
|
Budowanie z `CMake` |
|
|
|
|
--- |
|
|
|
|
Będę to robił mniej więcej tak: |
|
|
|
|
``` |
|
|
|
|
$ mkdir -p build |
|
|
|
|
$ cd build |
|
|
|
|
$ cmake .. |
|
|
|
|
$ make <kod_zadania> |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Budowanie z `make` |
|
|
|
|
--- |
|
|
|
|
Tu będzie nawet prościej: |
|
|
|
|
``` |
|
|
|
|
$ make <kod_zadania> |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Zadania |
|
|
|
|
--- |
|
|
|
|
Każde zadanie polega na napisaniu programu komputerowego, który wczytuje z wejścia |
|
|
|
|
opis grafu, oblicza *coś* i wypisuje opis tego *czegoś* na wyjście. Format wejścia |
|
|
|
|
jest następujący |
|
|
|
|
``` |
|
|
|
|
n m |
|
|
|
|
u_1 v_1 |
|
|
|
|
u_2 v_2 |
|
|
|
|
... |
|
|
|
|
u_m v_m |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
gdzie `n` i `m` oznaczają odpowiednio liczbę wierzchołków oraz krawędzi. `u_i` to |
|
|
|
|
początki krawędzi, a `v_i` - ich końce. Wierzchołki są numerowane różnymi liczbami |
|
|
|
|
całkowitymi od `1` do `n`. |
|
|
|
|
|
|
|
|
|
Zadanie 1 |
|
|
|
|
--- |
|
|
|
|
``` |
|
|
|
|
Kod zadania: topo/sort |
|
|
|
|
``` |
|
|
|
|
Wypisz na wyjście jakikolwiek z porządków topologicznych grafu. Jeśli nie ma, to wypisz `NIE`. Ograniczenia: `n ≤ 200000, m ≤ 300000`. |
|
|
|
|
|
|
|
|
|
Zadanie 2 |
|
|
|
|
--- |
|
|
|
|
``` |
|
|
|
|
Kod zadania: topo/count |
|
|
|
|
``` |
|
|
|
|
Wypisz na wyjście liczbę porządków topologicznych grafu. Ograniczenia: `n ≤ 20`. |
|
|
|
|
|
|
|
|
|
Zadanie 3 |
|
|
|
|
--- |
|
|
|
|
``` |
|
|
|
|
Kod zadania: scc/partition |
|
|
|
|
``` |
|
|
|
|
Wypisz `n` liczb całkowitych z zakresu `1...n`. `i`-ta i `j`-ta powinny być równe wtedy |
|
|
|
|
i tylko wtedy, gdy `i` oraz `j` są w jednej silnie spójnej składowej. Ograniczenia: |
|
|
|
|
`n ≤ 200000, m ≤ 300000`. |
|
|
|
|
|
|
|
|
|
Zadanie 3 |
|
|
|
|
--- |
|
|
|
|
``` |
|
|
|
|
Kod zadania: scc/make1 |
|
|
|
|
``` |
|
|
|
|
Dodaj do grafu jak najmniejszą liczbę krawędzi, tak żeby graf był silnie spójny. |
|
|
|
|
Na wyjście wypisz liczbę dodanych krawędzi oraz, w kolejnych wierszach, końce |
|
|
|
|
kolejnych krawędzi. Ograniczenia: `n ≤ 200000, m ≤ 300000`. |
|
|
|
|
|