Pagini recente » Cod sursa (job #2227266) | Cod sursa (job #2355201) | Cod sursa (job #2829530) | Cod sursa (job #1778117) | Cod sursa (job #2603614)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
const int dim = 10005;
int viz[dim],n,m,muchii,R[dim],L[dim];
vector <int> vec[dim];
bool Match(int nod)
{
if (viz[nod]) return false;
viz[nod] = 1;
for (auto v:vec[nod])
{
if (!R[v])
{
R[v] = nod;
L[nod] = v;
return true;
}
else
{
if (Match(R[v]))
{
L[nod] = v;
R[v] = nod;
return true;
}
}
}
return false;
}
int Cuplaj()
{
int ok = true;
int cnt = 0;
while (ok == true)
{
ok = false;
memset(viz,0,sizeof(viz));
for (int i=1; i<=n; i++)
{
if (L[i] == 0 && Match(i))
{
ok = true;
cnt++;
}
}
}
return cnt;
}
int main()
{
in >> n >> m >> muchii;
while (muchii--)
{
int x,y;
in >> x >> y;
vec[x].push_back(y);
}
out << Cuplaj() << "\n";
for (int i=1; i<=n; i++)
{
if (L[i] != 0) out << i << " " << L[i] << "\n";
}
return 0;
}