На езика на графите: имаме граф [tex]G[/tex] с [tex]n[/tex] върха и повече от [tex]\frac{3}{2}(n-1)[/tex] ребра. Да се докаже, че има 2 върха: [tex]x,y[/tex] , така че да има 3 непресичащи се пътя между [tex]x[/tex] и [tex]y[/tex].
Не е задължително графа [tex]G[/tex] да е свързан. Той може да има няколко свързани компоненти [tex]G_i\, i=1,\ldots,k[/tex] , всеки с [tex]v_i[/tex] брой върхове и [tex]e_i[/tex] на брой ребра, то поне за 1 от тях [tex]G_j[/tex] е в сила [tex]e_j > \frac{3}{2}(v_j - 1)[/tex]. Защо ? Ами защото, ако допуснем, че това не е така и за всяко [tex]i[/tex] имаме: [tex]e_i \leq \frac{3}{2}(v_i - 1)[/tex] , то ако съберем тези неравенства ще получим противоречие с условието. Всичко това показва, че спокйно може да считаме, че [tex]G[/tex] e свързан. В този случай е известен фактът, че може да изтрием част от ребрата на [tex]G[/tex], така че останалият граф е дърво и съдържа всички върхове на [tex]G[/tex]. Това дърво се нарича spanning tree на [tex]G[/tex] и да го означим с [tex]T[/tex] . На български може би трябва да се нарича покриващо дърво, но използвам англисйкия термин тъй като се е наложил абсолютно покрай приложението му в компютърните мрежи(spanning tree protocol на OSI модела, напр. всеки switch го има вграден ). Има много методи за построяване на spanning tree, но за това малко по-долу.
Всяко дърво, в частност [tex]T[/tex], има [tex]n-1[/tex] ребра- това е известно твърдение, простото му доказателство може да намерите например в Graph theory на Reinhard Diestel- една превъзходна книга, първите няколко глави, на която трябва да се изчетат подробно от всеки състезател със сериозни намерения.
Продължаваме- тъй като ребрата от [tex]G[/tex], които не са от [tex]T[/tex] са повече от [tex]\frac{n-1}{2}[/tex] , то има поне 2 от тях с общ връх.
Сега трябва да видим, че ако добавим в [tex]T[/tex] още две ребра излизащи от един и същ връх ще получим три пътя между 2 върха. Нека [tex]v \in T[/tex] и сме добавили още две ребра [tex]vu[/tex] и [tex]vw[/tex], [tex]u,w \in V(T)[/tex] (върховете на T) . Нека [tex]vu_1u_2\ldots u[/tex] и [tex]vw_1w_2\ldots w[/tex] са пътищата в [tex]T[/tex], които свързват съответно [tex]v[/tex] с [tex]u[/tex] и [tex]v[/tex] с [tex]w[/tex] (те са единствени-виж в горната книга). Ако [tex]u_1[/tex] съвпада с [tex]w_1[/tex] , работата е ясна, просто си начертайте едно дърво и от един връх добавете още 2 ребра така че в началото да са от един клон и ще видите.
Обаче е възможно [tex]vu_1u_2\ldots u[/tex] и [tex]vw_1w_2\ldots w[/tex] да са непресичащи се пътища. Тогава духаме супата.
Как може да избегнем тази ситуация. Можем ли да построим такова spanning tree (ST) на [tex]G[/tex] , че да я изключим?!
Най-известния начин за построяване на ST е с т.н. depth-first-search алгоритъм. Това е алгоритъма за преброждане на лабиринт. Тръгваме от един връх по [tex]G[/tex] произволно завивайки, докато не стигнем вече посетен връх. Тогава се връщаме един връх назад и тръгваме към непосетен връх и продължаваме нататък, ако няма непосетен връх връщаме се още назад и т.н. докато посетим всички върхове на първоначалния граф. Това ST има много хубави свойства, но не ни гарантира това, което търсим.
Другият алгоритъм е breadth-first search. Tръгваме от произволен връх [tex]v_0[/tex] и избираме всички ребра излизащи от този връх. Вземаме един от върховете, край на едно от тези ребра, и присъединяваме всички излизащи от него ребра, които не завършват с вече присъединен връх и т.н. При този алгоритъм, дървото [tex]T[/tex], което се получава има едно хубаво свойство: да вземем един произволен връх [tex]v[/tex] на дървото. Ако съществува ребро [tex]vu[/tex] на G, което не принадлежи на T, то обезателно [tex]u[/tex] е по-близо до началото [tex]v_0[/tex] , отколкото [tex]v[/tex] , като пътя от [tex]v_0[/tex] до [tex]v[/tex] в [tex]T[/tex] минава през [tex]u[/tex]. Eто това ни гарантира , че ситуацията описана по-горе не може да се случи.
Мисля, че това решение е конструктивно и например лесно може да се адаптира на програма, която намира тези 2 върха и 3-те непресичащи се пътища, които ги свързват.
Колко точки би получил състезател намерил това решение? Според инструкцията: "
1 т. за опростяването, че графът е свързан и всички върхове са от степен поне 2"

Да не говорим, че твърдението "
всички върхове са от степен поне 2" просто не е вярно !!