Pagini recente » Cod sursa (job #2249526) | Cod sursa (job #726824) | Cod sursa (job #2195110) | Cod sursa (job #154715) | Cod sursa (job #2638155)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
const int NMAX = 10000;
int N, M, E;
vector <int> g[NMAX + 2];
bool d[NMAX + 2];
int l[NMAX + 2], r[NMAX + 2];
int matches;
bool PairUp(int node)
{
if(d[node])
return false;
d[node] = true;
for(auto it : g[node])
if(!r[it])
{
++matches;
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;
}
void Solve()
{
bool ok;
do
{
ok = false;
for(int i = 1; i <= N; i++)
d[i] = false;
for(int i = 1; i <= N; i++)
if(!l[i])
ok |= PairUp(i);
}
while(ok);
}
int main()
{
cin >> N >> M >> E;
for(int i = 1; i <= E; i++)
{
int x, y;
cin >> x >> y;
g[x].push_back(y);
}
Solve();
cout << matches << '\n';
for(int i = 1; i <= N; i++)
if(l[i])
cout << i << ' ' << l[i] << '\n';
return 0;
}