Nu aveti permisiuni pentru a descarca fisierul grader_test18.in
Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2009-12-05 15:00:49.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:cmcm.in, cmcm.outSursăArhiva Educationala
AutorArhiva EducationalaAdăugată desavimSerban Andrei Stan savim
Timp execuţie pe test0.6 secLimită de memorie20480 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Cuplaj maxim de cost minim

Se dă un graf neorientat bipartit G(V=(L,R),E) cu costuri pe muchii. Definim un cuplaj in graf ca fiind o submulţime de muchii M ⊂ E, cu prorietatea că pentru orice nod v din V, va exista cel mult o muchie în mulţimea M incidentă in v. Costul unui cuplaj este determinat de suma costurilor muchiilor care îl compun.

Cerinţă

Pentru un graf G, să se determine cuplajul de cardinal maxim si cost minim.

Date de intrare

Pe prima linie a fişierului de intrare cmcm.in se vor găsi trei numere N,M şi E, reprezentând cardinalul muţimii L, cardinalul mulţimii R, respectiv numărul de muchii din graf. Pe următoarele E linii se vor găsi cate trei numere naturale P,Q si C, cu semnificaţia ca există o muchie de la nodul P din L la nodul Q din R de cost C.

Date de ieşire

Pe prima linie a fişierului de ieşire cmcm.out veti afişa două numere Nr si K, reprezentând numărul de muchii din cuplajul maxim, precum si costul minim al acestui cuplaj. A doua linie va conţine Nr numere reprezentând indicii muchiilor folosite pentru construcţia cuplajului soluţie.

Restricţii

  • 1 ≤ N, M ≤ 300
  • 1 ≤ E ≤ 50 000
  • -20 000 ≤ C ≤ 20 000
  • Indicii muchiilor se pot afişa în orice ordine
  • În caz că există mai multe soluţii puteţi afişa oricare

Exemplu

cmcm.incmcm.out
6 10 12
5 3 5
4 7 -5
5 9 -1
1 2 -1
2 9 5
6 1 0
6 4 -5
3 9 3
4 10 -3
3 8 4
4 8 -5
5 2 6
6 3
4 5 10 2 1 7

Indicaţii de rezolvare

Această problemă este o aplicaţie la fluxul maxim de cost minim, graful trebuind să suporte anumite modificari inainte de aplicarea algoritmului. Trebuie adăugate încă două noduri (sursa si destinaţia fluxului) S şi D. Vom trage o muchie de la S la fiecare nod din L de cost 0 şi capacitate 1, precum şi de la fiecare nod din R către D, tot de cost 0 si capacitate 1. Soluţia problemei va fi reprezentată de fluxul maxim de cost minim din această reţea. Datorită existenţei muchiilor negative, trebuie aplicat algoritmul Bellman-Ford, soluţia având astfel complexitate O(FLUX*N*M). O astfel de abordare obţine 50 de puncte. Pentru punctaj maxim, trebuie folosită o coadă la implementarea Bellman-Ford-ului. De observat că deşi teoretic aceşti algorimti se comportă destul de prost, în practica vor rula mult mai bine.

În cazul problemelor când cuplajul maxim va fi min(L,R), se recomanda folosirea Algoritmului lui Kuhn. Această abordare are complexitate O(N4), însă ca şi fluxul normal, se comportă mult mai bine în practică.

Aplicaţii

Infoarena - Adapost

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?