Pagini recente » Cod sursa (job #2587618) | Cod sursa (job #1158607) | Cod sursa (job #950163) | Cod sursa (job #590012) | Cod sursa (job #2694411)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int m,a,b,cuplat[nmax],m1[nmax],m2[nmax];
vector <int> v[nmax];
void citire()
{
int k,i,j;
fin>>a>>b>>m;
{
for(k=1;k<=m;k++)
{
fin>>i>>j;
v[i].push_back(j);
}
}
}
int cuplaj(int nod)
{
int j;
if(cuplat[nod])
return 0;
cuplat[nod]=1;
for(j=0;j<v[nod].size();j++)
if(!m1[v[nod][j]])
{
m1[v[nod][j]]=nod;
m2[nod]=v[nod][j];
return 1;
}
for(j=0;j<v[nod].size();j++)
if(cuplaj(m1[v[nod][j]]))
{
m1[v[nod][j]]=nod;
m2[nod]=v[nod][j];
return 1;
}
return 0;
}
int main()
{
citire();
int ok=1,i, nr=0;
while(ok)
{
for(i=1;i<=a;i++)
cuplat[i]=0;
ok=0;
for(i=1;i<=a;i++)
if(!m2[i])
if(cuplaj(i))
{
nr++;
ok=1;
}
}
fout<<nr<<"\n";
for(i=1;i<=a;i++)
if(m2[i])
fout<<i<<" "<<m2[i]<<"\n";
return 0;
}