Pagini recente » Cod sursa (job #1929533) | Cod sursa (job #896399) | Cod sursa (job #611353) | Cod sursa (job #446306) | Cod sursa (job #1339495)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n, m, e, i, x, y, ok, nr, L[100010], R[100010], v[100010];
vector <int> A[100010];
int cuplaj(int nod){
v[nod] = 1;
for(int i = 0; i < A[nod].size(); i ++)
if(R[A[nod][i]] == 0)
{
L[nod] = A[nod][i];
R[A[nod][i]] = nod;
return 1;
}
for(int i = 0; i < A[nod].size(); i ++)
if(v[R[A[nod][i]]] == 0 && cuplaj(R[A[nod][i]]))
{
L[nod] = A[nod][i];
R[A[nod][i]] = nod;
return 1;
}
return 0;
}
int main()
{
fin >> n >> m >> e;
for(i = 1; i <= e; i ++)
{
fin >> x >> y;
A[x].push_back(y);
}
do
{
for(i = 1; i <= n; i ++)
v[i] = 0;
ok = 0;
for(i = 1; i <= n; i ++)
if(L[i] == 0)
if(cuplaj(i))
{
ok = 1;
nr ++;
}
}while(ok);
fout << nr << '\n';
for(i = 1; i <= n; i ++)
if(L[i] != 0)
fout << i << " " << L[i] << '\n';
return 0;
}