From ac0fb9a145b5a4fab95e62ea09208bb717a0cfd8 Mon Sep 17 00:00:00 2001
From: Kacper Donat <kadet1090@gmail.com>
Date: Sun, 25 Feb 2018 17:37:30 +0100
Subject: [PATCH] =?UTF-8?q?rozwi=C4=85zanie=20zadania=204.3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 macros.tex      |  10 +-
 part-2/2013.tex | 528 ++++++++++++++++++++++++------------------------
 part-2/2018.tex |  52 ++++-
 3 files changed, 313 insertions(+), 277 deletions(-)

diff --git a/macros.tex b/macros.tex
index 5286b6d..2a13f59 100644
--- a/macros.tex
+++ b/macros.tex
@@ -24,6 +24,12 @@
 \let\oldthetask\thetask
 \let\oldthesubtask\thesubtask
 
+\renewcommand\leq\leqslant
+\renewcommand\geq\geqslant
+
+\let\oldemptyset\emptyset
+\renewcommand\emptyset\varnothing
+
 \renewcommand{\thesection}{\arabic{section}}
 \renewcommand{\thesubtask}{\alph{subtask}}
 \renewcommand{\thetask}{\thesection.\oldthetask}
@@ -60,6 +66,7 @@
 
 \newcommand{\NP}{\texttt{NP}\xspace}
 \newcommand{\NPC}{\texttt{NPC}\xspace}
+\newcommand{\NPH}{\texttt{NPH}\xspace}
 \newcommand{\NPI}{\texttt{NPI}\xspace}
 \renewcommand{\P}{\texttt{P}\xspace}
 
@@ -86,6 +93,3 @@
 \floatstyle{plain}
 \newfloat{program}{thp}{lop}
 \floatname{program}{Program}
-
-\renewcommand\leq\leqslant
-\renewcommand\geq\geqslant
diff --git a/part-2/2013.tex b/part-2/2013.tex
index b7c2f6a..d9937fd 100644
--- a/part-2/2013.tex
+++ b/part-2/2013.tex
@@ -6,28 +6,28 @@
 \subtask{Jeśli nie potrafisz, to spróbuj udowodnić jego \NP-zupełność}
 
 \begin{solution}
-Przy rozwiązywaniu tego zadania, jedną z pierwszych myśli może być, że jest to problem zbliżony
-do problemu sumy podzbioru - i jest to prawdą, jest to specyficzny wypadek problemu sumy podzbioru.
+    Przy rozwiązywaniu tego zadania, jedną z pierwszych myśli może być, że jest to problem zbliżony
+    do problemu sumy podzbioru - i jest to prawdą, jest to specyficzny wypadek problemu sumy podzbioru.
 
-Zauważmy jednak, że do dyspozycji mamy tylko i wyłącznie 6 wartości: 1, 2, 5, 10, 20, 50 oraz, że $n$ jest stałe i wynosi $100$.
-Łatwo zauważyć, że istnieją bardzo proste przypadki, które rozwiązują nasz problem. Przykładowo, jeżeli mamy 2 bankonoty 50zł to
-jesteśmy w stanie zapłacić 100zł bez problemu, tak samo mając 5 banknotów 20zł czy nawet 100 złotówek.
+    Zauważmy jednak, że do dyspozycji mamy tylko i wyłącznie 6 wartości: 1, 2, 5, 10, 20, 50 oraz, że $n$ jest stałe i wynosi $100$.
+    Łatwo zauważyć, że istnieją bardzo proste przypadki, które rozwiązują nasz problem. Przykładowo, jeżeli mamy 2 bankonoty 50zł to
+    jesteśmy w stanie zapłacić 100zł bez problemu, tak samo mając 5 banknotów 20zł czy nawet 100 złotówek.
 
-\begin{table}[H]
-\begin{tabular}{rrrrrr}
-1zł & 2zł & 5zł & 10zł & 20zł & 50zł \\ \hline
- - & - & - & - & - & 2 \\
- - & - & - & 1 & 2 & 1 \\
- - & - & - & 3 & 1 & 1 \\
- - & - & 2 & 2 & 1 & 1 \\
- \vdots &  \vdots &  \vdots &  \vdots &  \vdots &  \vdots
-\end{tabular}
-\centering
-\caption{Możliwe kombinacje tworzące 100zł}
-\end{table}
+    \begin{table}[H]
+    \begin{tabular}{rrrrrr}
+    1zł & 2zł & 5zł & 10zł & 20zł & 50zł \\ \hline
+     - & - & - & - & - & 2 \\
+     - & - & - & 1 & 2 & 1 \\
+     - & - & - & 3 & 1 & 1 \\
+     - & - & 2 & 2 & 1 & 1 \\
+     \vdots &  \vdots &  \vdots &  \vdots &  \vdots &  \vdots
+    \end{tabular}
+    \centering
+    \caption{Możliwe kombinacje tworzące 100zł}
+    \end{table}
 
-Stąd wynika, że istnieje jedynie skończona ilość kombinacji, którymi możemy utworzyć 100zł. Wystarczy zatem sprawdzić
-je wszystkie, a to można wykonac zawsze w tym samym czasie - uzyskany algorytm jest $O(1)$.
+    Stąd wynika, że istnieje jedynie skończona ilość kombinacji, którymi możemy utworzyć 100zł. Wystarczy zatem sprawdzić
+    je wszystkie, a to można wykonac zawsze w tym samym czasie - uzyskany algorytm jest $O(1)$.
 \end{solution}
 
 \task
@@ -37,37 +37,37 @@ je wszystkie, a to można wykonac zawsze w tym samym czasie - uzyskany algorytm
     byś mógł skorzystać z mojego programu? Zaprojektuj taki program i oszacuj jego złożoność.
 
 \begin{solution}
-Nasz graf $G$ może być w zasadzie dowolnym grafem 100-wierzchołkowym, w szczególności nie wiemy nic o tym czy jest
-hamiltonowski czy nie. Do dyspozycji mamy program, który jest w stanie odpowiedzieć na nasze pytanie,
-ale tylko jeżeli graf \textbf{nie} jest hamiltonowski. Potrzebujemy zatem sposobu na przetworzenie naszego grafu $G$ tak,
-aby nie miał szans być hamiltonowski - jednak to przekształcenie nie może wpływać na odpowiedź na nasze pytanie.
+    Nasz graf $G$ może być w zasadzie dowolnym grafem 100-wierzchołkowym, w szczególności nie wiemy nic o tym czy jest
+    hamiltonowski czy nie. Do dyspozycji mamy program, który jest w stanie odpowiedzieć na nasze pytanie,
+    ale tylko jeżeli graf \textbf{nie} jest hamiltonowski. Potrzebujemy zatem sposobu na przetworzenie naszego grafu $G$ tak,
+    aby nie miał szans być hamiltonowski - jednak to przekształcenie nie może wpływać na odpowiedź na nasze pytanie.
 
-Na wstępie przypomnijmy, że graf hamiltonowski to taki, w którym istnieje cykl pozwalający przejść po
-wszystkich wierzchołkach dokładnie raz. Co znaczy, że każdy graf hamiltonowski musi być przede wszystkim grafem spójnym.
-Co za tym idzie, jeżeli przekształcimy nasz graf G w taki sposób, że nie będzie spójny to będziemy mieli pewność,
-że nie będzie hamiltonowski.
+    Na wstępie przypomnijmy, że graf hamiltonowski to taki, w którym istnieje cykl pozwalający przejść po
+    wszystkich wierzchołkach dokładnie raz. Co znaczy, że każdy graf hamiltonowski musi być przede wszystkim grafem spójnym.
+    Co za tym idzie, jeżeli przekształcimy nasz graf G w taki sposób, że nie będzie spójny to będziemy mieli pewność,
+    że nie będzie hamiltonowski.
 
-Nie możemy usuwać ani dodawać krawędzi między wierzchołkami naszego grafu $G$, ponieważ mogłoby to wpłynąć na istnienie
-w nim kliki - najprostszym rozwiązaniem będzie więc dodanie zupełnie nowego wierzchołka, nazwijmy go $v_{101}$,
-który nie jest połączony z żadnym innym.
+    Nie możemy usuwać ani dodawać krawędzi między wierzchołkami naszego grafu $G$, ponieważ mogłoby to wpłynąć na istnienie
+    w nim kliki - najprostszym rozwiązaniem będzie więc dodanie zupełnie nowego wierzchołka, nazwijmy go $v_{101}$,
+    który nie jest połączony z żadnym innym.
 
-\begin{figure}[H]
-    \centering
-    \input{gfx/hamilton.tex}
-    \caption{Transformacja w graf niehamiltonowski}
-\end{figure}
+    \begin{figure}[H]
+        \centering
+        \input{gfx/hamilton.tex}
+        \caption{Transformacja w graf niehamiltonowski}
+    \end{figure}
 
-Dodanie jednego swobodnego wierzchołka nie wpłynie na istnienie kliki $K_{10}$ bądź większej ponieważ jeden wierzchołek
-nie wystarczy na utworzenie kliki, a nie dodajemy żadnych krawędzi, które mogłyby doprowadzić do tego, że klika nagle powstała.
+    Dodanie jednego swobodnego wierzchołka nie wpłynie na istnienie kliki $K_{10}$ bądź większej ponieważ jeden wierzchołek
+    nie wystarczy na utworzenie kliki, a nie dodajemy żadnych krawędzi, które mogłyby doprowadzić do tego, że klika nagle powstała.
 
-Innym możliwym rozwiązaniem jest dodanie wierzchołka połączonego z tylko jednym wierzchołkiem - jedyny sposób aby się
-do niego dostać będzie przez 1 wierzchołek, a żeby przejść dalej będziemy musieli się cofnąć do wierzchołka, w którym już byliśmy.
+    Innym możliwym rozwiązaniem jest dodanie wierzchołka połączonego z tylko jednym wierzchołkiem - jedyny sposób aby się
+    do niego dostać będzie przez 1 wierzchołek, a żeby przejść dalej będziemy musieli się cofnąć do wierzchołka, w którym już byliśmy.
 
-Jeżeli zaś chodzi o złożoność, to ważnym jest, że graf jest podany w formie macierzy sąsiedztwa, czyli aby dodać
-wierzchołek musimy do macierzy dodać 1 wiersz i 1 kolumnę - czyli w zasadzie utworzyć nową macierz. Operacja ta wymaga
-utworzenia $(n+1) \times (n+1)$ komórek, czyli teoretycznie jej złożoność to $O(n^2)$ jednak biorąc pod uwagę, że dla
-grafu $G$ z definicji $n = 100$ możemy powiedzieć, że operacja ta dla każdego takiego grafu G jest do wykonania w czasie
-stałym, czyli $O(1)$ - obie odpowiedzi będą poprawne.
+    Jeżeli zaś chodzi o złożoność, to ważnym jest, że graf jest podany w formie macierzy sąsiedztwa, czyli aby dodać
+    wierzchołek musimy do macierzy dodać 1 wiersz i 1 kolumnę - czyli w zasadzie utworzyć nową macierz. Operacja ta wymaga
+    utworzenia $(n+1) \times (n+1)$ komórek, czyli teoretycznie jej złożoność to $O(n^2)$ jednak biorąc pod uwagę, że dla
+    grafu $G$ z definicji $n = 100$ możemy powiedzieć, że operacja ta dla każdego takiego grafu G jest do wykonania w czasie
+    stałym, czyli $O(1)$ - obie odpowiedzi będą poprawne.
 \end{solution}
 
 \task{\textit{Ograniczony Problem Kliki} - \problem{OPK} - zdefiniowany jest następująco: ,,Dany jest graf $G$ i liczby
@@ -76,38 +76,38 @@ naturalne $a$, $b$ takie, że $a \leq b$, czy w $G$ istnieje klika o rozmiarze $
 \subtask{$\problem{OPK} \in \problem{NPC}$}
 
 \begin{solution}
-Aby udowodnić, że dany problem należy do klasy \NP należy zrobić jedną z dwóch rzeczy - przedstawić niedeterministyczny
-algorytm rozwiązujący ten problem w czasie wielomianowym, bądź zaprezentować wielomianowy algorytm sprawdzający
-rozwiązanie tego problemu. Moim zdaniem, podejście drugie jest o wiele łatwiejsze i przyjemniejsze - zatem to właśnie
-je zaprezentuję i będę wykorzystywał.
+    Aby udowodnić, że dany problem należy do klasy \NP należy zrobić jedną z dwóch rzeczy - przedstawić niedeterministyczny
+    algorytm rozwiązujący ten problem w czasie wielomianowym, bądź zaprezentować wielomianowy algorytm sprawdzający
+    rozwiązanie tego problemu. Moim zdaniem, podejście drugie jest o wiele łatwiejsze i przyjemniejsze - zatem to właśnie
+    je zaprezentuję i będę wykorzystywał.
 
-Aby sprawdzić rozwiązanie, potrzebujemy więcej informacji niż proste \textbf{tak} lub \textbf{nie} - taką dodatkową
-informację nazywamy \textit{certyfikatem}, przykładowo w wypadku pytania, czy liczba $n$ jest złożona, certyfikatem mogą
-być dwie liczby $p$ i $q$ takie, że $n = p \cdot q$ - mając taki certyfikat łatwo jest potwierdzić, że faktycznie
-liczba jest złożona.
+    Aby sprawdzić rozwiązanie, potrzebujemy więcej informacji niż proste \textbf{tak} lub \textbf{nie} - taką dodatkową
+    informację nazywamy \textit{certyfikatem}, przykładowo w wypadku pytania, czy liczba $n$ jest złożona, certyfikatem mogą
+    być dwie liczby $p$ i $q$ takie, że $n = p \cdot q$ - mając taki certyfikat łatwo jest potwierdzić, że faktycznie
+    liczba jest złożona.
 
-W naszym wypadku certyfikatem może być lista wierzchołków tworząca klikę $K_n$. Określenie $r$ będzie wymagało
-sprawdzenia długości listy, co z pewnością można wykonać w czasie wielomianowym, a sprawdzenie czy wierzchołki tworzą
-klikę będzie wymagało sprawdzenia czy faktycznie każdy wierzchołek sąsiaduje z każdym innym wierzchołkiem z listy - co
-też można wykonać w czasie wielomianowym. Stąd wynika, że problem należy do klasy \NP.
+    W naszym wypadku certyfikatem może być lista wierzchołków tworząca klikę $K_n$. Określenie $r$ będzie wymagało
+    sprawdzenia długości listy, co z pewnością można wykonać w czasie wielomianowym, a sprawdzenie czy wierzchołki tworzą
+    klikę będzie wymagało sprawdzenia czy faktycznie każdy wierzchołek sąsiaduje z każdym innym wierzchołkiem z listy - co
+    też można wykonać w czasie wielomianowym. Stąd wynika, że problem należy do klasy \NP.
 
-Dowód, że problem należy do \NPC jest trochę trudniejszy do przeprowadzenia - należy mianowicie wykonać
-$\alpha$-redukcję jakiegoś problemu, który wiemy że jest \NPC do problemu, który badamy. Naturalnym kandydatem tutaj
-wydaje się być problem kliki:
-``Czy w grafie $G$ istnieje klika wielkości $n$?,,
+    Dowód, że problem należy do \NPC jest trochę trudniejszy do przeprowadzenia - należy mianowicie wykonać
+    $\alpha$-redukcję jakiegoś problemu, który wiemy że jest \NPC do problemu, który badamy. Naturalnym kandydatem tutaj
+    wydaje się być problem kliki:
+    ``Czy w grafie $G$ istnieje klika wielkości $n$?,,
 
-\begin{figure}[H]
-    \centering
-    \input{./gfx/klika-opk.tex}
-    \caption{schemat $\alpha$-redukcji \problem{kliki} do \problem{OPK}}
-\end{figure}
+    \begin{figure}[H]
+        \centering
+        \input{./gfx/klika-opk.tex}
+        \caption{schemat $\alpha$-redukcji \problem{kliki} do \problem{OPK}}
+    \end{figure}
 
-Aby dokonać $\alpha$-redukcji musimy w wielomianowym czasie na podstawie danych $G, n$ znaleźć takie $G_1, a, b$ aby
-rozwiązując problem \problem{OPK} uzyskać odpowiedź na problem kliki. Wiemy, że \problem{OPK} zwróci nam prawdę jeżeli
-w grafie $G_1$ będzie klika o rozmiarze $r$ takim, że $a \leq r \leq b$. Jeżeli chcemy znaleźć klikę konkretnego
-rozmiaru, wystarczy zauważyć, że jeżeli $a = b \land A \leq r \leq b$ to $a = b = r$. Nasza $\alpha$-redukcja mogłaby
-zatem wyglądać następująco: $G_1 = G, a = n, b = n$. Co z pewnością możemy dokonać w czasie wielomianowym. Fakt, że 
-takie podstawienie zachowuje problem udowodniliśmy już powyżej. 
+    Aby dokonać $\alpha$-redukcji musimy w wielomianowym czasie na podstawie danych $G, n$ znaleźć takie $G_1, a, b$ aby
+    rozwiązując problem \problem{OPK} uzyskać odpowiedź na problem kliki. Wiemy, że \problem{OPK} zwróci nam prawdę jeżeli
+    w grafie $G_1$ będzie klika o rozmiarze $r$ takim, że $a \leq r \leq b$. Jeżeli chcemy znaleźć klikę konkretnego
+    rozmiaru, wystarczy zauważyć, że jeżeli $a = b \land A \leq r \leq b$ to $a = b = r$. Nasza $\alpha$-redukcja mogłaby
+    zatem wyglądać następująco: $G_1 = G, a = n, b = n$. Co z pewnością możemy dokonać w czasie wielomianowym. Fakt, że 
+    takie podstawienie zachowuje problem udowodniliśmy już powyżej. 
 \end{solution}
 
 \task{\textit{Problem zanurzenia} (\problem{PZ}) grafu w innym grafie zdefiniowany jest następująco. Dane są dwa grafy:
@@ -116,47 +116,47 @@ $f: V(G) \to V(H)$, że każdej krawędzi $\{u, v\} \in G$ odpowiada krawędź $
 problemem NP-zupełnym.}
 
 \begin{solution}
-Przed dowiedzeniem, że problem jest \NPC najpierw musimy udowodnić, że w ogóle znajduje się w klasie \NP. Po raz
-kolejny wykorzystamy tutaj podejście z certyfikatem, w tym wypadku będzie nim funkcja $f$. Nie rozważamy tutaj tego
-jak trudno jest wyliczyć na komputerze wynik działania funkcji $f$, zatem zakładamy, że $f = O(1)$. Przetworzenie
-wszystkich krawędzi można zatem wykonać w czasie $O(m(G))$. Aby sprawdzić czy krawędź istnieje w grafie $H$ w
-najgorszym wypadku musimy przejrzeć wszystkie krawędzie - co daje nam czas $O(m(H))$, ponieważ dla każdej przetworzonej
-krawędzi w $G$ musimy sprawdzić jej istnienie w $H$ to w najgorszym wypadku uzyskamy czas
-$O(m(H) \cdot m(G))$ - czyli wielomianowy.
+    Przed dowiedzeniem, że problem jest \NPC najpierw musimy udowodnić, że w ogóle znajduje się w klasie \NP. Po raz
+    kolejny wykorzystamy tutaj podejście z certyfikatem, w tym wypadku będzie nim funkcja $f$. Nie rozważamy tutaj tego
+    jak trudno jest wyliczyć na komputerze wynik działania funkcji $f$, zatem zakładamy, że $f = O(1)$. Przetworzenie
+    wszystkich krawędzi można zatem wykonać w czasie $O(m(G))$. Aby sprawdzić czy krawędź istnieje w grafie $H$ w
+    najgorszym wypadku musimy przejrzeć wszystkie krawędzie - co daje nam czas $O(m(H))$, ponieważ dla każdej przetworzonej
+    krawędzi w $G$ musimy sprawdzić jej istnienie w $H$ to w najgorszym wypadku uzyskamy czas
+    $O(m(H) \cdot m(G))$ - czyli wielomianowy.
 
-Aby udowodnić, że \problem{PZ} jest \NPC musimy znaleźć $\alpha$-redukcje jakiegoś innego, najlepiej zbliżonego
-problemu do \problem{PZ}. Na początek zauważmy, że $f$ musi być funkcją różnowartościową, ponieważ gdyby nie była, to
-istniałyby takie $u_1 \neq u_2$, że $f(u_1) = f(u_2) = v$, co dawałoby nieistniejącą krawędź $\{ v, v \}$
-(tj. wierzchołek byłby połączony z samym sobą). Gdybyśmy natomiast rozpatrywali grafy mogące zawierać takie pętle
-własne, to problem dla takich grafów oraz funkcji nieróżnowartościowej stawałby się trywialny - wystarczyłoby zmapować
-wszystkie wierzchołki na ten jeden z pętlą własną i taka funkcja istniałaby zawsze.
+    Aby udowodnić, że \problem{PZ} jest \NPC musimy znaleźć $\alpha$-redukcje jakiegoś innego, najlepiej zbliżonego
+    problemu do \problem{PZ}. Na początek zauważmy, że $f$ musi być funkcją różnowartościową, ponieważ gdyby nie była, to
+    istniałyby takie $u_1 \neq u_2$, że $f(u_1) = f(u_2) = v$, co dawałoby nieistniejącą krawędź $\{ v, v \}$
+    (tj. wierzchołek byłby połączony z samym sobą). Gdybyśmy natomiast rozpatrywali grafy mogące zawierać takie pętle
+    własne, to problem dla takich grafów oraz funkcji nieróżnowartościowej stawałby się trywialny - wystarczyłoby zmapować
+    wszystkie wierzchołki na ten jeden z pętlą własną i taka funkcja istniałaby zawsze.
 
-Z tego, że $f$ jest różnowartościowa wynika, że jeżeli wierzchołek w grafie G $\deg u = \delta$ to w grafie H
-$\deg f(u) \geq \delta$. Można to zaobserwować na rysunku poniżej.
+    Z tego, że $f$ jest różnowartościowa wynika, że jeżeli wierzchołek w grafie G $\deg u = \delta$ to w grafie H
+    $\deg f(u) \geq \delta$. Można to zaobserwować na rysunku poniżej.
 
-\begin{figure}[H]
-    \centering
-    \input{gfx/mapowanie.tex}
-    \caption{Powiązane wierzchołki mają ten sam kolor w obu grafach.}
-\end{figure}
+    \begin{figure}[H]
+        \centering
+        \input{gfx/mapowanie.tex}
+        \caption{Powiązane wierzchołki mają ten sam kolor w obu grafach.}
+    \end{figure}
 
-Biorąc pod uwagę ten tok rozumowania, możemy zauważyć że problem ten jest nam w stanie łatwo odpowiedzieć czy w danym
-grafie $H$ występuje podgraf $G$. Znanym problemem \NPC, który wymaga sprawdzenia obecności danego podgrafu w innym
-grafie jest oczywiście problem kliki.
+    Biorąc pod uwagę ten tok rozumowania, możemy zauważyć że problem ten jest nam w stanie łatwo odpowiedzieć czy w danym
+    grafie $H$ występuje podgraf $G$. Znanym problemem \NPC, który wymaga sprawdzenia obecności danego podgrafu w innym
+    grafie jest oczywiście problem kliki.
 
-\begin{figure}[H]
-    \centering
-    \input{./gfx/klika-pz.tex}
-    \caption{schemat $\alpha$-redukcji kliki do PZ}
-\end{figure}
+    \begin{figure}[H]
+        \centering
+        \input{./gfx/klika-pz.tex}
+        \caption{schemat $\alpha$-redukcji kliki do PZ}
+    \end{figure}
 
-$\alpha$-redukcja polega na sprawdzeniu czy graf pełny $K_n$ jest podgrafem grafu $G_0$, czyli dla problemu \problem{PZ}
-otrzymalibyśmy tak skonstruowane dane wejściowe:
-$G = K_n, H = G_0$.
+    $\alpha$-redukcja polega na sprawdzeniu czy graf pełny $K_n$ jest podgrafem grafu $G_0$, czyli dla problemu \problem{PZ}
+    otrzymalibyśmy tak skonstruowane dane wejściowe:
+    $G = K_n, H = G_0$.
 
-Problem jest zachowany ponieważ jeżeli w grafie $G_0$ występuje klika o rozmiarze $n$ to możemy każdemu wierzchołkowi
-kliki znalezionej w $G_0$ przypisać unikalny wierzchołek w $K_n$. W drugą stronę analogicznie, jeżeli istnieje takie
-przypisanie to w grafie $G_0$ musi znajdować się klika $K_n$.
+    Problem jest zachowany ponieważ jeżeli w grafie $G_0$ występuje klika o rozmiarze $n$ to możemy każdemu wierzchołkowi
+    kliki znalezionej w $G_0$ przypisać unikalny wierzchołek w $K_n$. W drugą stronę analogicznie, jeżeli istnieje takie
+    przypisanie to w grafie $G_0$ musi znajdować się klika $K_n$.
 \end{solution}
 
 \task{Przedyskutuj złożoność obliczeniową następujących problemów decyzyjnych, zakładając, że $G$ jest kubiczny
@@ -180,32 +180,32 @@ brzmi ona \textbf{tak} lub \textbf{nie}.}
 $G = C_{2k-1}$ (czyli będącego cyklem nieparzystym i $G = K_n$)}
 
 \begin{solution}
-Problem dotyczy liczby chromatycznej grafu - $\chi(G)$ - czyli minimalnej liczby kolorów potrzebnej do poprawnego
-pokolorowania grafu. Graf można pokolorować 1 kolorem $\chi(G) = 1$, tylko wtedy kiedy nie ma on krawędzi, a tym wypadku
-wiemy, że graf jest 3-regularny czyli dla każdego wierzchołka $v \in G$ wiemy, że jest połączony z 3 innymi
-wierzchołkami - stąd możemy wywnioskować, że dla tego typu grafów $\chi(G) \geq 2$.
+    Problem dotyczy liczby chromatycznej grafu - $\chi(G)$ - czyli minimalnej liczby kolorów potrzebnej do poprawnego
+    pokolorowania grafu. Graf można pokolorować 1 kolorem $\chi(G) = 1$, tylko wtedy kiedy nie ma on krawędzi, a tym wypadku
+    wiemy, że graf jest 3-regularny czyli dla każdego wierzchołka $v \in G$ wiemy, że jest połączony z 3 innymi
+    wierzchołkami - stąd możemy wywnioskować, że dla tego typu grafów $\chi(G) \geq 2$.
 
-Dodatkowo wiemy, że każdy graf dwudzielny można pokolorować za pomocą dokładnie 2 kolorów ponieważ zawiera 2 grupy 
-niepołączonych ze sobą wierzchołków - a sprawdzenie dwudzielności grafu można osiągnąć za pomocą BFS-a lub DFS-a, 
-czyli w złożoności $O(m+ n)$.
+    Dodatkowo wiemy, że każdy graf dwudzielny można pokolorować za pomocą dokładnie 2 kolorów ponieważ zawiera 2 grupy 
+    niepołączonych ze sobą wierzchołków - a sprawdzenie dwudzielności grafu można osiągnąć za pomocą BFS-a lub DFS-a, 
+    czyli w złożoności $O(m+ n)$.
 
-Z wskazówki znamy twierdzenie Brooksa - $\chi(G) \leq \Delta$, w naszym wypadku z 3-regularności oczywistym jest, że
-$\Delta = 3$, czyli $\chi(G) \leq 3$, \textbf{CHYBA, że} graf jest nieparzystym cyklem - co możemy wyeliminować ponieważ
-cykl nie jest 3-regularny, lub $G = K_4$, gdzyż klika rozmiaru 4 jest 3-regularna (Ogólnie kliki rozmiaru $n$
-są $(n - 1)$-regularne) i tylko w tym jednym wypadku będziemy potrzebować 4 kolorów, ale nigdy więcej.
+    Z wskazówki znamy twierdzenie Brooksa - $\chi(G) \leq \Delta$, w naszym wypadku z 3-regularności oczywistym jest, że
+    $\Delta = 3$, czyli $\chi(G) \leq 3$, \textbf{CHYBA, że} graf jest nieparzystym cyklem - co możemy wyeliminować ponieważ
+    cykl nie jest 3-regularny, lub $G = K_4$, gdzyż klika rozmiaru 4 jest 3-regularna (Ogólnie kliki rozmiaru $n$
+    są $(n - 1)$-regularne) i tylko w tym jednym wypadku będziemy potrzebować 4 kolorów, ale nigdy więcej.
 
-Zatem podsumowując odpowiedzi:
+    Zatem podsumowując odpowiedzi:
 
-\begin{enumerate}[a)]
-    \item $\chi(X) \leq 1$ - \textbf{NIE}
-    \item $\chi(X) \leq 2$ - sprawdzenie dwudzielności - $O(n + m)$
-    \item $\chi(X) \leq 3$ - sprawdzenie czy $G \neq K_4$ - $O(1)$
-    \item $\chi(X) \leq 4$ - \textbf{TAK}
-    \item $\chi(X) \geq 1$ - \textbf{TAK} - zawsze potrzebny jest minimum 1 kolor
-    \item $\chi(X) \geq 2$ - \textbf{TAK} - minimalna liczba potrzebnych kolorów dla takiego grafu to 2
-    \item $\chi(X) \geq 3$ - jeżeli graf nie jest dwudzielny - to na pewno potrzebuje minimum 3 kolorów - $O(n+m)$
-    \item $\chi(X) \geq 4$ - graf potrzebuje 4 kolorów tylko, gdy jest kliką $K_4$ - $O(1)$.
-\end{enumerate}
+    \begin{enumerate}[a)]
+        \item $\chi(X) \leq 1$ - \textbf{NIE}
+        \item $\chi(X) \leq 2$ - sprawdzenie dwudzielności - $O(n + m)$
+        \item $\chi(X) \leq 3$ - sprawdzenie czy $G \neq K_4$ - $O(1)$
+        \item $\chi(X) \leq 4$ - \textbf{TAK}
+        \item $\chi(X) \geq 1$ - \textbf{TAK} - zawsze potrzebny jest minimum 1 kolor
+        \item $\chi(X) \geq 2$ - \textbf{TAK} - minimalna liczba potrzebnych kolorów dla takiego grafu to 2
+        \item $\chi(X) \geq 3$ - jeżeli graf nie jest dwudzielny - to na pewno potrzebuje minimum 3 kolorów - $O(n+m)$
+        \item $\chi(X) \geq 4$ - graf potrzebuje 4 kolorów tylko, gdy jest kliką $K_4$ - $O(1)$.
+    \end{enumerate}
 \end{solution}
 
 \task{\NP-trudny problem \textit{Maximum Acyclic Subgraph} (\problem{MAS}) pyta o maksymalny zbiór łuków digrafu $D$,
@@ -218,157 +218,157 @@ który generuje digraf acykliczny. Problem ten ma prosty algorym 2-aproksymacyjn
 \tip{Jaki digraf definiuje górna/dolna macierz trójkątna macierzy $A$?}
 
 \begin{solution}
-Na wstępie - zadanie słabo opisuje problem i więcej informacji można wyciągnąć z nazwy problemu po angielsku niż jego opisu.
-W problemie chodzi o znalezienie największego podgrafu acyklicznego w digrafie $D$.
-\begin{figure}[H]
-    \begin{minipage}{.5\linewidth}%
-        \centering
-        \input{./gfx/mas-1.tex}
-    \end{minipage}%
-    \begin{minipage}{.5\linewidth}%
-        \begin{equation*}
-            A_D = \begin{bmatrix}
-                0 & 1 & 0 & 0 & 1 \\
-                0 & 0 & 1 & 0 & 0 \\
-                1 & 0 & 0 & 0 & 1 \\
-                0 & 0 & 1 & 0 & 0 \\
-                0 & 0 & 0 & 1 & 0 \\
-            \end{bmatrix}
-        \end{equation*}
-    \end{minipage}%
-    \caption{Przykładowy digraf $D$ wraz z maksymalnym podgrafem acyklicznym oraz macierzą sąsiedztwa.}
-\end{figure}
+    Na wstępie - zadanie słabo opisuje problem i więcej informacji można wyciągnąć z nazwy problemu po angielsku niż jego opisu.
+    W problemie chodzi o znalezienie największego podgrafu acyklicznego w digrafie $D$.
+    \begin{figure}[H]
+        \begin{minipage}{.5\linewidth}%
+            \centering
+            \input{./gfx/mas-1.tex}
+        \end{minipage}%
+        \begin{minipage}{.5\linewidth}%
+            \begin{equation*}
+                A_D = \begin{bmatrix}
+                    0 & 1 & 0 & 0 & 1 \\
+                    0 & 0 & 1 & 0 & 0 \\
+                    1 & 0 & 0 & 0 & 1 \\
+                    0 & 0 & 1 & 0 & 0 \\
+                    0 & 0 & 0 & 1 & 0 \\
+                \end{bmatrix}
+            \end{equation*}
+        \end{minipage}%
+        \caption{Przykładowy digraf $D$ wraz z maksymalnym podgrafem acyklicznym oraz macierzą sąsiedztwa.}
+    \end{figure}
 
-Z zadania wiemy, że algorytm dzieli digraf $D$ na dwie części, na podstawie wskazówki \#1 możemy się domyślać, że ma to
-coś wspólnego z macierzami trójkątnymi macierzy $A_D$. Zobaczmy, co te macierze reprezentują:
-\begin{figure}[H]
-    \begin{minipage}{.5\linewidth}%
-        \centering
-        \input{./gfx/mas-2.tex}
-    \end{minipage}%
-    \begin{minipage}{.5\linewidth}%
-        \begin{equation*}
-            A_D = \begin{bmatrix}
-                0 & 1 & 0 & 0 & 1 \\
-                  & 0 & 1 & 0 & 0 \\
-                  &   & 0 & 0 & 1 \\
-                  &   &   & 0 & 0 \\
-                  &   &   &   & 0 \\
-            \end{bmatrix}
-        \end{equation*}
-    \end{minipage}%
-    \caption{Graf opisany przez macierz trójkątną górną macierzy $A_D$}
-\end{figure}
+    Z zadania wiemy, że algorytm dzieli digraf $D$ na dwie części, na podstawie wskazówki \#1 możemy się domyślać, że ma to
+    coś wspólnego z macierzami trójkątnymi macierzy $A_D$. Zobaczmy, co te macierze reprezentują:
+    \begin{figure}[H]
+        \begin{minipage}{.5\linewidth}%
+            \centering
+            \input{./gfx/mas-2.tex}
+        \end{minipage}%
+        \begin{minipage}{.5\linewidth}%
+            \begin{equation*}
+                A_D = \begin{bmatrix}
+                    0 & 1 & 0 & 0 & 1 \\
+                      & 0 & 1 & 0 & 0 \\
+                      &   & 0 & 0 & 1 \\
+                      &   &   & 0 & 0 \\
+                      &   &   &   & 0 \\
+                \end{bmatrix}
+            \end{equation*}
+        \end{minipage}%
+        \caption{Graf opisany przez macierz trójkątną górną macierzy $A_D$}
+    \end{figure}
 
-\begin{figure}[H]
-    \begin{minipage}{.5\linewidth}%
-        \centering
-        \input{./gfx/mas-3.tex}
-    \end{minipage}%
-    \begin{minipage}{.5\linewidth}%
-        \begin{equation*}
-            A_D = \begin{bmatrix}
-                0 &   &   &   &   \\
-                0 & 0 &   &   &   \\
-                1 & 0 & 0 &   &   \\
-                0 & 0 & 1 & 0 &   \\
-                0 & 0 & 0 & 1 & 0 \\
-            \end{bmatrix}
-        \end{equation*}
-    \end{minipage}%
-    \caption{Graf opisany przez macierz trójkątną dolną macierzy $A_D$}
-\end{figure}
+    \begin{figure}[H]
+        \begin{minipage}{.5\linewidth}%
+            \centering
+            \input{./gfx/mas-3.tex}
+        \end{minipage}%
+        \begin{minipage}{.5\linewidth}%
+            \begin{equation*}
+                A_D = \begin{bmatrix}
+                    0 &   &   &   &   \\
+                    0 & 0 &   &   &   \\
+                    1 & 0 & 0 &   &   \\
+                    0 & 0 & 1 & 0 &   \\
+                    0 & 0 & 0 & 1 & 0 \\
+                \end{bmatrix}
+            \end{equation*}
+        \end{minipage}%
+        \caption{Graf opisany przez macierz trójkątną dolną macierzy $A_D$}
+    \end{figure}
 
-Jak widać górna macierz trójkątna opisuje tylko takie krawędzie (łuki) $(u_1, u_2)$ że $u_1 < u_2$, czyli nie może
-wystąpić cykl ponieważ to wymagałoby powrotu do wierzchołka, który już rozpatrywaliśmy - a to jest niemożliwe w takiej
-macierzy. W macierzy dolnej sytuacja jest analogiczna, z tym że zachodzi warunek $u_1 > u_2$.
+    Jak widać górna macierz trójkątna opisuje tylko takie krawędzie (łuki) $(u_1, u_2)$ że $u_1 < u_2$, czyli nie może
+    wystąpić cykl ponieważ to wymagałoby powrotu do wierzchołka, który już rozpatrywaliśmy - a to jest niemożliwe w takiej
+    macierzy. W macierzy dolnej sytuacja jest analogiczna, z tym że zachodzi warunek $u_1 > u_2$.
 
-Rozwiązanie takie gwarantuje brak cyklu, jednak nie jest dokładne, zastanówmy się więc jaki może być najgorszy przypadek.
-Biorąc pod uwagę, że bierzemy połowę grafu możemy być pewni, że algorytm nie pomyli się bardziej niż 2-krotnie, ponieważ
-w najgorszym wypadku cały graf jest już acykliczny, a my bierzemy jego połowę. Nie mamy jednak pewności co do tego,
-czy faktycznie może istnieć acykliczny graf dokładnie 2 krotnie większy od swojej połówki i prawdopodobnie na tym można
-skończyć dowód, jednak udowodnijmy że faktycznie istnieje taki przypadek w którym algorytm zwróci dokładnie
-2-przybliżony.
+    Rozwiązanie takie gwarantuje brak cyklu, jednak nie jest dokładne, zastanówmy się więc jaki może być najgorszy przypadek.
+    Biorąc pod uwagę, że bierzemy połowę grafu możemy być pewni, że algorytm nie pomyli się bardziej niż 2-krotnie, ponieważ
+    w najgorszym wypadku cały graf jest już acykliczny, a my bierzemy jego połowę. Nie mamy jednak pewności co do tego,
+    czy faktycznie może istnieć acykliczny graf dokładnie 2 krotnie większy od swojej połówki i prawdopodobnie na tym można
+    skończyć dowód, jednak udowodnijmy że faktycznie istnieje taki przypadek w którym algorytm zwróci dokładnie
+    2-przybliżony.
 
-Aby uzyskać taki graf w dolnej i górnej macierzy trójkątnej musimy mieć dokładnie taką samą ilość krawędzi, a ponadto
-graf musi pozostać acykliczny. Nie jesteśmy w stanie stworzyć grafu o 2 wierzchołkach, który spełniałby ten warunek,
-ponieważ albo algorytm zwróci odpowiedź dokładną, albo graf będzie cykliczny tj. wierzchołek 1 będzie połączony z 2 oraz
-2 z 1. Jesteśmy w stanie skonstruować jednak taki graf 3 wierzchołkowy, ponieważ wystarczy że będziemy mieli dokładnie
-jedno połączenie wierzchołka ,,mniejszego'' z ,,większym'' oraz dokładnie jedno ,,większego'' z ,,mniejszym'' przy czym jedynym
-ograniczeniem jest to, że nie mogą to być te same wierzchołki.
+    Aby uzyskać taki graf w dolnej i górnej macierzy trójkątnej musimy mieć dokładnie taką samą ilość krawędzi, a ponadto
+    graf musi pozostać acykliczny. Nie jesteśmy w stanie stworzyć grafu o 2 wierzchołkach, który spełniałby ten warunek,
+    ponieważ albo algorytm zwróci odpowiedź dokładną, albo graf będzie cykliczny tj. wierzchołek 1 będzie połączony z 2 oraz
+    2 z 1. Jesteśmy w stanie skonstruować jednak taki graf 3 wierzchołkowy, ponieważ wystarczy że będziemy mieli dokładnie
+    jedno połączenie wierzchołka ,,mniejszego'' z ,,większym'' oraz dokładnie jedno ,,większego'' z ,,mniejszym'' przy czym jedynym
+    ograniczeniem jest to, że nie mogą to być te same wierzchołki.
 
-\begin{figure}[H]
-    \begin{minipage}{.5\linewidth}%
-        \centering
-        \input{./gfx/mas-4.tex}
-    \end{minipage}%
-    \begin{minipage}{.5\linewidth}%
-        \begin{equation*}
-            A_D = \begin{bmatrix}
-                0 & 1 & 0 \\
-                0 & 0 & 0 \\
-                0 & 1 & 0 \\
-            \end{bmatrix}
-        \end{equation*}
-    \end{minipage}%
-    \caption{Graf opisany przez macierz trójkątną dolną macierzy $A_D$}
-\end{figure}
+    \begin{figure}[H]
+        \begin{minipage}{.5\linewidth}%
+            \centering
+            \input{./gfx/mas-4.tex}
+        \end{minipage}%
+        \begin{minipage}{.5\linewidth}%
+            \begin{equation*}
+                A_D = \begin{bmatrix}
+                    0 & 1 & 0 \\
+                    0 & 0 & 0 \\
+                    0 & 1 & 0 \\
+                \end{bmatrix}
+            \end{equation*}
+        \end{minipage}%
+        \caption{Graf opisany przez macierz trójkątną dolną macierzy $A_D$}
+    \end{figure}
 
-W tym wypadku digraf $D$ jest acykliczny, jednak algorytm będzie w stanie znaleźć tylko podgraf $\{ (1, 2) \}$
-lub $\{ (1, 3) \}$, czyli zwróci 2-krotnie za mały wynik.
+    W tym wypadku digraf $D$ jest acykliczny, jednak algorytm będzie w stanie znaleźć tylko podgraf $\{ (1, 2) \}$
+    lub $\{ (1, 3) \}$, czyli zwróci 2-krotnie za mały wynik.
 
-Istnienie schematu (F)PTAS mówi nam, że jesteśmy w stanie znaleźć wielomianowy algorytm o dowolnie dobrym przybliżeniu,
-tj. algorytm $(1 + \varepsilon)$-aproksymacyjny, gdzie $\varepsilon > 0$. Znalezienie takiego schematu jest trudne i jak
-mniemam wykraczające poza obszar przedmiotu a na pewno kolokwium, jednak stosunkowo prosto udowodnić, że taki schemat
-nie może istnieć. Wystarczy udowodnić, że dla każdych możliwych danych wejściowych istnieje taki epsilon, że z
-odpowiedzi przybliżonej jesteśmy w stanie ze 100\% pewnością wywnioskować odpowiedź dokładną - a to znaczyłoby, że
-posiadamy wielomianowy algorytm rozwiązujący dany problem \NP-trudny dokładnie, co znaczyłoby, że $\P = \NP$
+    Istnienie schematu (F)PTAS mówi nam, że jesteśmy w stanie znaleźć wielomianowy algorytm o dowolnie dobrym przybliżeniu,
+    tj. algorytm $(1 + \varepsilon)$-aproksymacyjny, gdzie $\varepsilon > 0$. Znalezienie takiego schematu jest trudne i jak
+    mniemam wykraczające poza obszar przedmiotu a na pewno kolokwium, jednak stosunkowo prosto udowodnić, że taki schemat
+    nie może istnieć. Wystarczy udowodnić, że dla każdych możliwych danych wejściowych istnieje taki epsilon, że z
+    odpowiedzi przybliżonej jesteśmy w stanie ze 100\% pewnością wywnioskować odpowiedź dokładną - a to znaczyłoby, że
+    posiadamy wielomianowy algorytm rozwiązujący dany problem \NP-trudny dokładnie, co znaczyłoby, że $\P = \NP$
 
-W tym wypadku rozważamy problem maksymalizacyjny, czyli wiemy że odpowiedź dokładna $N_\text{opt}$ jest większa bądź
-równa od odpowiedzi naszego algorytmu $N$:
-\begin{equation}
-    N_{\text{opt}} \geq N
-\end{equation}
+    W tym wypadku rozważamy problem maksymalizacyjny, czyli wiemy że odpowiedź dokładna $N_\text{opt}$ jest większa bądź
+    równa od odpowiedzi naszego algorytmu $N$:
+    \begin{equation}
+        N_{\text{opt}} \geq N
+    \end{equation}
 
-Co za tym idzie, z definicji przybliżalności wynika, że:
-\begin{equation*}
-    \frac{N_{\text{opt}}}{N} \leq 1+\varepsilon \iff N_\text{opt} \leq N(1 + \varepsilon)
-\end{equation*}
+    Co za tym idzie, z definicji przybliżalności wynika, że:
+    \begin{equation*}
+        \frac{N_{\text{opt}}}{N} \leq 1+\varepsilon \iff N_\text{opt} \leq N(1 + \varepsilon)
+    \end{equation*}
 
-łącząc te dwie wiadomości możemy wywnioskować, że
-\begin{equation}
-    \label{eqn:2013:fptas}
-    N \leq N_\text{opt} \leq N + N\varepsilon
-\end{equation}
+    łącząc te dwie wiadomości możemy wywnioskować, że
+    \begin{equation}
+        \label{eqn:2013:fptas}
+        N \leq N_\text{opt} \leq N + N\varepsilon
+    \end{equation}
 
-ponieważ wiemy, że liczba krawędzi w grafie jest zawsze liczbą naturalną ($N_\text{opt} \in \mathbb{N}$ oraz $N \in \mathbb{N}$),
-wystarczy że w nierówności \ref{eqn:2013:fptas} będzie spełniony warunek
+    ponieważ wiemy, że liczba krawędzi w grafie jest zawsze liczbą naturalną ($N_\text{opt} \in \mathbb{N}$ oraz $N \in \mathbb{N}$),
+    wystarczy że w nierówności \ref{eqn:2013:fptas} będzie spełniony warunek
+    \begin{equation}
+        \label{eqn:2013:fptas-condition}
+        N\varepsilon < 1
+    \end{equation}
 
-\begin{equation}
-    \label{eqn:2013:fptas-condition}
-    N\varepsilon < 1
-\end{equation}
+    A uzyskamy
+    \begin{equation*}
+        N \leq N_\text{opt} \leq N + N\varepsilon \Rightarrow N \leq N_\text{opt} \leq N
+    \end{equation*}
+    \begin{equation*}
+        N_\text{opt} = N
+    \end{equation*}
+    czyli algorytm zwróci nam odpowiedź dokładną.
 
-A uzyskamy
+    Należy więc udowodnić że dla każdych danych wejściowych jesteśmy w stanie znaleźć dostatecznie mały $\varepsilon$, 
+    który spowoduje że nasza odpowiedź będzie dokładna. Aby tego dokonać ograniczmy przybliżoną odpowiedź algorytmu z 
+    dołu. Oczywistym jest, że w grafie o $m$ krawędziach nie będzie grafu o ilości krawędzi $N$ większej niż $m$, a już
+    na pewno większej niż $m+1$:
+    \begin{equation*}
+        N < m + 1
+    \end{equation*}
 
-\begin{equation*}
-    N \leq N_\text{opt} \leq N + N\varepsilon \Rightarrow N \leq N_\text{opt} \leq N
-\end{equation*}
-\begin{equation*}
-    N_\text{opt} = N
-\end{equation*}
+    Jeżeli teraz przedzielimy obie strony nierówności przez $m + 1$ uzyskamy po prawej stronie 1, dokładnie tak jak w nierówności \ref{eqn:2013:fptas-condition}
+    \begin{equation*}
+        \frac{1}{m+1}N < 1
+    \end{equation*}
 
-czyli algorytm zwróci nam odpowiedź dokładną.
-
-Należy więc udowodnić że dla każdych danych wejściowych jesteśmy w stanie znaleźć dostatecznie mały $\varepsilon$, który spowoduje że nasza odpowiedź będzie dokładna. Aby tego dokonać ograniczmy przybliżoną odpowiedź algorytmu z dołu. Oczywistym jest, że w grafie o $m$ krawędziach nie będzie grafu o ilości krawędzi $N$ większej niż $m$, a już na pewno większej niż $m+1$:
-\begin{equation*}
-    N < m + 1
-\end{equation*}
-
-Jeżeli teraz przedzielimy obie strony nierówności przez $m + 1$ uzyskamy po prawej stronie 1, dokładnie tak jak w nierówności \ref{eqn:2013:fptas-condition}
-\begin{equation*}
-    \frac{1}{m+1}N < 1
-\end{equation*}
-
-a co za tym idzie wystarczy, że $\varepsilon < \frac{1}{m+1}$ a będziemy w stanie wywnioskować dokładny wynik w czasie wielomianowym, co jest możliwe tylko gdy $\P = \NP$.
+    a co za tym idzie wystarczy, że $\varepsilon < \frac{1}{m+1}$ a będziemy w stanie wywnioskować dokładny wynik w czasie wielomianowym, co jest możliwe tylko gdy $\P = \NP$.
 \end{solution}
diff --git a/part-2/2018.tex b/part-2/2018.tex
index 0b56227..1e64b89 100644
--- a/part-2/2018.tex
+++ b/part-2/2018.tex
@@ -1,4 +1,4 @@
-%! TEX root = main.tex
+%! TEX root = ../main.tex
 
 \section{25.01.2018 kolokwium \#2}
 \task Rozważ problem wyznaczania wartości indeksu chromatycznego $n$-wierzchołkowego grafu $G$, czyli $\chi'(G)$. 
@@ -128,15 +128,48 @@ Uzasadnij prawdziwość lub fałszywość następujących twierdzeń dotyczącyc
 \begin{table}[H]
     \centering
     \begin{tabular}{rl|c|c}
-        & klasa & Weryfikowalne & Rozwiązywalne \\\hline
+        & klasa & Weryfikowalne \dag & Rozwiązywalne \dag \\\hline
         \subtask & \P & & \\
         \subtask & \NP & & \\
         \subtask & \NPC & & \\
         \subtask & \NP-trudne & & \\
     \end{tabular}
 \end{table}
+\noindent\dag\ w czasie wielomianowym
 \note{W niektórych wypadkach więcej niż jedna odpowiedź jest poprawna}
 
+\begin{solution}
+    Z definicji, problemy klasy \P da się rozwiązać w czasie wielomianowym - a ponieważ da się je rozwiązać to również 
+    da sie sprawdzić poprawnosć rozwiązania (wystarczy rozwiązać i porównać) w czasie wielomianowym. 
+
+    Wiadomo, że wszystkie problemy z klasy \NP są weryfikowalne w czasie wielomianowym - nie wiemy natomiast czy
+    problemy te możemy w czasie wielomianowym rozwiązać. Jednak należy pamiętać, że klasa $\P \subseteq \NP$ - zatem w 
+    klasie \NP z pewnością są też problemy, które możemy rozwiązać w czasie wielomianowym.
+
+    Ponieważ $\NPC \subseteq \NP$ to na pewno ich rozwiązania da się zweryfikować w czasie wielomianowym. Gdybyśmy wiedzieli
+    jednak, że jakiegoś problemu \NPC nie da się rozwiązać w czasie wielomianowym to znaczyłoby to, że $\P \neq \NP$,
+    podobnie gdybyśmy wiedzieli, że któryś problem \NPC da się rozwiązać w czasie wielomianowym to na pewno prawdą
+    byłoby, że $\P = \NP$. A że nie wiemy czy $\P = \NP$ tak też nie wiemy nic na temat rozwiązywalności problemów \NPC
+    w czasie wielomianowym.
+
+    Problemy \NP-trudne to problemy conajmniej tak trudne jak najtrudniejsze problemy w klasie \NP, zatem w pewnym
+    sensie prawdą jest, że $\NPC = \NP \cap \NPH$. Stąd wynika, że w klasie \NPH na pewno są problemy, które da się
+    zweryfikować w czasie wielomianowym, o których rozwiązaniu nic nie wiadomo. Ponieważ jednak są to propblemy
+    \textit{conajmniej} tak trudne to klasa ta zawiera też problemy niealgorytmiczne, których nie da się ani rozwiązać
+    ani zweryfikować w czasie rzeczywistym.
+
+    \begin{table}[H]
+        \centering
+        \begin{tabular}{rl|c|c}
+            & klasa & Weryfikowalne \dag & Rozwiązywalne \dag \\\hline
+            \subtask & \P & \textbf{TAK} & \textbf{TAK} \\
+            \subtask & \NP & \textbf{TAK} & \textbf{TAK}, \textbf{NW} \\
+            \subtask & \NPC & \textbf{TAK} & \textbf{NW} \\
+            \subtask & \NP-trudne & \textbf{TAK}, \textbf{NIE} & \textbf{NW}, \textbf{NIE} \\
+        \end{tabular}
+    \end{table}
+\end{solution}
+
 \task Algorytm \textit{Largest First} (\problem{LF}) dla kolorowania wierzchołków grafu maluje je zachłannie
 poczynając od wierzchołka o najwyższym stopniu i kończąc na weierzchołku o najniższym stopniu.
 \subtask Oszacuj złożoność obliczeniową algorytmu \problem{LF} jako funnkcję $n$ za pomocą symbolu $\Theta$
@@ -146,11 +179,10 @@ poczynając od wierzchołka o najwyższym stopniu i kończąc na weierzchołku o
 \subtask Udowodnij, że \problem{LF} jest $k$-bezwzględnie aproksymacyjny i $l$-wzzględnie aproksymacyjny w odniesieniu 
 do grafów kubicznych tj. ustal wartości k i l
 
-\task \textit{Kolorowanie Kosztowe} (\problem{KK}) polega na tym, że kolory mają swoje koszty
-$c_1 \leq c_2 \leq \ldots \leq c_n$ i za każdym razem, gdy kolorujemy kolejny wierzchołek, przydzielamy mu koszt tego
-koloru. Problem polaga na tym, by tak pokolrowoać graf aby sumaryczny koszt kolorowania $\text{skk}(G)$ wszystkich 
-wierzchołków był jak najmniejszy. Udowodnij, że nawet jeżeli $c_1 = c_2 = \ldots = c_k \leq c_{k+1}$ to problem ten
-jest \NP-trudny.
+\task \textit{Kolorowanie Kosztowe} (\problem{KK}) polega na tym, że kolory mają swoje koszty $c_1 \leq c_2 \leq \ldots
+\leq c_n$ i za każdym razem, gdy kolorujemy kolejny wierzchołek, przydzielamy mu koszt tego koloru. Problem polaga na
+tym, by tak pokolrowoać graf aby sumaryczny koszt kolorowania $\text{skk}(G)$ wszystkich wierzchołków był jak
+najmniejszy. Udowodnij, że nawet jeżeli $c_1 = c_2 = \ldots = c_k \leq c_{k+1}$ to problem ten jest \NP-trudny.
 
 \begin{solution}
     Aby udowodnić, że problem jest \NP-trudny musimy udowodnić, że jego wersja decyzyjna jest \NPC. W wypadku tego 
@@ -177,14 +209,14 @@ jest \NP-trudny.
     poniesiemy będzie na pewno większy niż $n$. Zatem graf da się pokolorować kosztem $n$ tylko kiedy graf da się 
     pokolorować $k$ kolorami, gdzie koszt każdego koloru wynosi $1$. Nasza $\alpha$-redukcja będzie zatem następująca:
     \begin{equation*}
-        G, k \rightarrow \underset{G}{G}, \underset{c}{n}, \underset{c_k}{1}, \underset{k}{k}, \underset{c_{k+1}}{2}, \underset{c_{k+1}}{2}, \ldots
+        G, k \rightarrow \underset{G}{G}, \underset{c}{n}, \underset{c_k}{1}, \underset{k}{k}, \underset{c_{k+1}}{2}, \underset{c_{k+2}}{2}, \ldots
     \end{equation*}
 \end{solution}
 
 \task Alicja jest częstym klientem sklepu \textit{SuperShop} i uzbierała 5 kuponów rabatowych o różnych wartościach
-zniżek. Ma zapisane na liście zakupowej $n$ produktów, które chce dzisiaj kupić oraz ich ceny. Chce pójść dzisiaj do 
+zniżek. Ma zapisane na liście zakupowej $n$ produktów, które chce dzisiaj kupić oraz ich ceny. Chce pójść dzisiaj do
 sklepu bez gotówki i kupić wybrane produkty używajac tylko kuponów. Nie chce natomiast zmarnować żadnego kuponu, czyli
-używa tylko tych, których wartość zostanie w pełni wykorzystana. Zastnawia się czy istnieje zestaw produktów i 
+używa tylko tych, których wartość zostanie w pełni wykorzystana. Zastnawia się czy istnieje zestaw produktów i
 odpowiednia kombinacja kuponów, by mogła pójść na zakupy i kupić cokolwiek?
 
 \note{Wszystkie kwoty są zaokrąglane do pełnych złotówek}