Pagini recente » Cod sursa (job #2333440) | Cod sursa (job #149199) | Cod sursa (job #18407) | Cod sursa (job #2291127) | Cod sursa (job #2640826)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int l, r, m, ans;
vector <int> v[10005];
int lleft[10005], rright[10005];
bool aux[10005];
bool pairup(int x)
{
if(aux[x] != 0)
return false;
aux[x] = 1;
for(int i = 0; i < v[x].size(); i++)
if(rright[v[x][i]] == 0)
{
ans ++;
lleft[x] = v[x][i];
rright[v[x][i]] = x;
return true;
}
for(int i = 0; i < v[x].size(); i++)
if(pairup(rright[v[x][i]]) != 0)
{
lleft[x] = v[x][i];
rright[v[x][i]] = x;
return true;
}
return false;
}
int main()
{
fin >> l >> r >> m;
for(int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
v[x].push_back(y);
}
bool ok = true;
while(ok == true)
{
ok = false;
fill(aux, aux + 10002, 0);
for(int i = 1; i <= l; i++)
if(lleft[i] == 0)
ok |= pairup(i);
}
fout << ans << '\n';
for(int i = 1; i <= l; i++)
if(lleft[i] != 0)
fout << i << " " << lleft[i] << '\n';
return 0;
}