Pagini recente » Cod sursa (job #2104081) | Cod sursa (job #1129043) | Cod sursa (job #775861) | Cod sursa (job #1645738) | Cod sursa (job #1422908)
//#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
#include <vector>
#define pb push_back
#define LE 10666
vector<int> H[LE];
bool viz[LE];
int l[LE],r[LE];
bool pair_up(int nod)
{
viz[nod]=true;
int N=H[nod].size(),i;
for(i=0; i<N; ++i)
{
int D=H[nod][i];
if (l[D]==0)
{
l[D]=nod;
r[nod]=D;
return true;
}
if (viz[l[D]]==false)
if (pair_up(l[D])==true)
{
l[D]=nod;
r[nod]=D;
return true;
}
}
return false;
}
int main()
{
int n1,n2,m,i;
f>>n1>>n2>>m;
for(i=1; i<=m; ++i)
{
int xx,yy;
f>>xx>>yy;
H[xx].pb(yy);
}
while (true)
{
bool okz=false;
for(i=1; i<=n1; ++i) viz[i]=false;
for(i=1; i<=n1; ++i)
if (r[i]==0)
if (viz[i]==false)
okz|=pair_up(i);
if (okz==false) break;
}
int nr_sol=0;
for(i=1; i<=n2; ++i)
if (l[i]!=0)
++nr_sol;
g<<nr_sol<<'\n';
for(i=1; i<=n2; ++i)
if (l[i]!=0)
g<<l[i]<<" "<<i<<'\n';
return 0;
}