Pagini recente » Cod sursa (job #1773078) | Cod sursa (job #207737) | Cod sursa (job #1015966) | Cod sursa (job #2487154) | Cod sursa (job #1336231)
#include<fstream>
#include<vector>
#include<bitset>
using namespace std;
#define NMAX 10005
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> v[NMAX];
bitset <NMAX> viz;
int n,m,k,x,y,nr,L[NMAX],R[NMAX];
bool ok;
bool cupleaza(int nod)
{
vector <int>::iterator it;
if (viz[nod]) return false;
viz[nod]=1;
for (it=v[nod].begin();it!=v[nod].end();++it)
if (!R[*it])
{
L[nod]=*it, R[*it]=nod;
return true;
}
for (it=v[nod].begin();it!=v[nod].end();++it)
if (cupleaza(R[*it]))
{
L[nod]=*it, R[*it]=nod;
return true;
}
return false;
}
int main()
{
int i;
fin>>n>>m>>k;
for (i=0;i<k;++i)
{
fin>>x>>y;
v[x].push_back(y);
}
for (ok=true;ok;)
{
ok=false;
viz.reset();
for (i=1;i<=n;++i)
if (!L[i] && cupleaza(i))
ok=true;
}
for (i=1;i<=n;++i)
if (L[i]) ++nr;
fout<<nr<<"\n";
for (i=1;i<=n;++i)
if (L[i])
fout<<i<<" "<<L[i]<<"\n";
return 0;
}