Pagini recente » Cod sursa (job #1888857) | Cod sursa (job #2634219) | Cod sursa (job #2528588) | Cod sursa (job #1257131) | Cod sursa (job #2386868)
#include <cstring>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
const int Dim = 10001;
int n,m,e,L[Dim],R[Dim],maxmat,Viz[Dim];
using VI = vector < int >;
using VVI = vector < VI >;
bool Cupleaza(int nod);
VVI G;
int main() {
fin >> n >> m >> e;
G = VVI( n + 1);
int x,y;
for (; e > 0; --e) {
fin >> x >> y;
G[x].push_back(y);
}
bool found = true;
while ( found) {
found = false;
memset(Viz,0,sizeof(Viz));
for ( int i = 1; i <= n; ++i)
if ( !L[i] and Cupleaza(i) )
found = true,++maxmat;
}
fout << maxmat << "\n";
for ( int i = 1; i <= n; ++i)
if (L[i] )
fout << i << " " << L[i] << "\n";
}
bool Cupleaza(int nod) {
if ( Viz[nod]) return false;
Viz[nod] = 1;
for ( const int & y : G[nod])
if (!R[y] or Cupleaza(R[y])) {
L[nod] = y;
R[y] = nod;
return true;
}
return false;
}