Pagini recente » Cod sursa (job #1907393) | Cod sursa (job #206573) | Cod sursa (job #2684369) | Cod sursa (job #275679) | Cod sursa (job #2138159)
#include <bits/stdc++.h>
#define Nmax 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int N, M, E;
int L[Nmax], R[Nmax];
vector <int> G[Nmax];
bool used[Nmax];
bool pairup(int node)
{
if(used[node])
return false;
used[node] = true;
for(auto it : G[node])
if(!R[it])
{
L[node] = it;
R[it] = node;
return true;
}
for(auto it : G[node])
if(pairup(R[it]))
{
L[node] = it;
R[it] = node;
return true;
}
return false;
}
int main()
{
fin >> N >> M >> E;
while(E--)
{
int x, y;
fin >> x >> y;
G[x].push_back(y);
}
bool ok = true;
while(ok)
{
ok = false;
memset(used, false, sizeof(used));
for(int i = 1; i <= N; i++)
if(L[i] == 0)
if(pairup(i))
ok = true;
}
int cnt = 0;
for(int i = 1; i <= N; i++)
cnt += L[i] > 0;
fout << cnt << "\n";
for(int i = 1; i <= N; i++)
if(L[i])
fout << i << " " << L[i] << "\n";
return 0;
}