Diferente pentru problema/biconex intre reviziile #1 si #28

Diferente intre titluri:

biconex
Componente biconexe

Diferente intre continut:

== include(page="template/taskheader" task_id="biconex") ==
Poveste şi cerinţă...
Se dă un 'graf neorientat':http://mathworld.wolfram.com/UndirectedGraph.html $G = (V, E)$. Un graf se numeşte 'graf biconex':http://en.wikipedia.org/wiki/Biconnected_graph dacă nu are puncte de articulaţie. Un nod se numeşte punct de articulaţie dacă 'subgraful':http://en.wikipedia.org/wiki/Glossary_of_graph_theory#Subgraphs obţinut prin eliminarea nodului şi a muchiilor incidente cu acesta nu mai este {'conex':http://en.wikipedia.org/wiki/Connectivity_(graph_theory)#Definitions_of_components.2C_cuts_and_connectivity}. O componentă biconexă a unui graf este un subgraf biconex maximal cu această proprietate.
 
h2. Cerinţă
 
Dându-se un graf neorientat $G = (V, E)$ se cere să se determine componentele sale biconexe.
h2. Date de intrare
Fişierul de intrare $biconex.in$ ...
Fişierul de intrare $biconex.in$ conţine pe prima linie două numere naturale $N$ şi $M$ ce reprezintă numărul de noduri din $G$ şi numărul muchiilor. Pe următoarele $M$ linii se vor afla câte două numere naturale $x$ şi $y$, separate prin spaţiu, reprezentând muchia neorientată $(x, y)$.
h2. Date de ieşire
În fişierul de ieşire $biconex.out$ ...
În fişierul de ieşire $biconex.out$ se va afişa pe prima linie un singur număr reprezentând numărul componentelor biconexe. Pe fiecare din următoarele linii se va scrie câte o componentă biconexă prin enumerarea nodurilor componente. Acestea pot fi afişate în orice ordine.
h2. Restricţii
* $... ≤ ... ≤ ...$
* $2 ≤ N ≤ 100 000$
* $1 ≤ M ≤ 200 000$
* Pentru aflarea corectă doar a numărului componentelor biconexe se va acorda $40%$ din punctaj.
h2. Exemplu
table(example). |_. biconex.in |_. biconex.out |
| This is some
  text written on
  multiple lines.
| This is another
  text written on
  multiple lines.
| 8 9
1 2
2 3
3 4
4 1
1 5
5 6
6 7
7 5
7 8
| 4
1 2 3 4
7 8
5 6 7
1 5
|
!> problema/biconex?biconex.png 60%!
 
h3. Explicaţie
...
În graful neorientat din exemplu componentele sale biconexe sunt reprezentate prin cerculeţe. Notaţi că o muchie poate aparţine unei singure componente biconexe pe când un nod poate aparţine mai multor componente biconexe.
 
h2. Indicaţii de rezolvare
 
Toate informaţiile necesare le găsiţi în cartea '"Introducere in algoritmi"':http://zhuzeyuan.hp.infoseek.co.jp/ita/chap23.htm, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. În exerciţiul $23-2$ se tratează teoretic problema determinării componentelor biconexe.
 
!> problema/biconex?biconex2.png 50%!
 
Pentru a descompune graful în componente biconexe am folosit proprietăţile parcurgerii $DFS$. După o parcurgere $DFS$ muchiile grafului se vor clasifica în două categorii:
 
* muchii care aparţin arborelui $DFS$ (muchiile normale din figură);
* muchii care nu aparţin arborelui şi care unesc un nod cu un strămoş al său, aceste muchii numindu-se muchii de întoarecere (muchiile reprezentate punctat în figură).
 
Problema determinării componentelor biconexe este strâns legată de problema determinării punctelor de articulaţie. După parcurgerea anterioară, un nod $X$ va fi nod de articulaţie dacă există cel puţin un fiu al său $Y$ din care nu se poate ajunge la un strămoş al lui $X$ pe un alt drum „în jos” în arborele $DFS$ şi apoi pe o muchie de întoarcere. Folosind o stivă în care reţinem muchiile din graf în ordinea în care sunt întâlnite în timpul parcurgerii, atunci când întâlnim un nod $X$ care are un fiu $Y$ cu proprietăţile de mai înainte, vom elimina din stivă toate muchiile până la muchia $(X, Y)$ inclusiv. Acest muchii formează o componentă biconexă. În desenul din dreapta, muchiile $(X, Y)$ cu proprietatea de mai sus sunt $(7, 8)$, $(5, 6)$, $(1, 5)$ şi $(1, 2)$.
 
Dacă graful este reprezentat prin liste de adiacenţă atunci complexitatea 'algoritmului':job_detail/236392?action=view-source este $O(N + M)$.
 
h2. Probleme suplimentare
 
În multe aplicaţii practice modelate cu ajutorul grafurilor, punctele de articulaţie nu sunt de dorit. Să considerăm o reţea de telecomunicaţii. Dacă o centrală dintr-un punct de articulaţie se defectează atunci comunicarea este întreruptă nu numai cu centrala respectivă ci şi cu alte centrale. Deci, un graf biconex este dorit.
 
Printre problemele care folosesc ideile de mai sus se numără:
 
* 'Ro':problema/ro
* 'Santa':problema/santa
* SICN, '_ONI 2000_':downloads#oni
* 'Roads':http://ceoi.inf.elte.hu/probarch/00/p2.htm, _CEOI 2000_
* "Apple Tree":http://acm.tju.edu.cn/toj/showp.php?pid=2840
== include(page="template/taskfooter" task_id="biconex") ==

Nu exista diferente intre securitate.

Diferente intre topic forum:

 
3544