Pagini recente » Cod sursa (job #2741174) | Cod sursa (job #1385830) | Cod sursa (job #3269223) | Cod sursa (job #1611000) | Cod sursa (job #1409379)
#include <fstream>
#include <vector>
#include <cstring>
#define nmax 10001
using namespace std;
ifstream is ("cuplaj.in");
ofstream os ("cuplaj.out");
vector <int> V[nmax];
int N, M, E, ANSW;
int U[nmax], L[nmax], R[nmax];
void Read();
int Solve(int x);
int main()
{
Read();
bool ok = true;
while(ok) {
ok = false;
memset(U, 0, sizeof(U));
for(int i = 1; i <= N; ++i)
if(!L[i]) ok |= Solve(i);
}
for(int i = 1; i <= N; ++i)
if(L[i] > 0) ANSW ++;
os << ANSW << "\n";
for(int i = 1; i <= N; ++i)
if(L[i]) os << i << " " << L[i] << "\n";
is.close();
os.close();
return 0;
}
void Read()
{
int x, y;
is >> N >> M >> E;
for(int i = 1; i <= E; ++i)
{
is >> x >> y;
V[x].push_back(y);
}
}
int Solve(int x)
{
if(U[x]) return 0;
U[x] = 1;
for(const auto& i : V[x])
{
if(!R[i])
{
L[x] = i;
R[i] = x;
return 1;
}
if(Solve(R[i]))
{
L[x] = i;
R[i] = x;
return 1;
}
}
return 0;
}