Pagini recente » Istoria paginii runda/oji_in_iulie_lol | Cod sursa (job #211695) | Cod sursa (job #601118) | Cod sursa (job #2351426) | Cod sursa (job #1219105)
#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,ok,sol,L[NMAX],R[NMAX];
int cupleaza(int s)
{
int i,z;
viz[s]=1;
for (i=0;i<v[s].size();++i)
{
z=v[s][i];
if (R[z]==0)
{
L[s]=z, R[z]=s;
return 1;
}
}
for (i=0;i<v[s].size();++i)
{
z=v[s][i];
if (viz[R[z]]==0 && cupleaza(R[z]))
{
L[s]=z, R[z]=s;
return 1;
}
}
return 0;
}
int main()
{
int i;
fin>>n>>m>>k;
for (i=0;i<k;++i)
{
fin>>x>>y;
v[x].push_back(y);
}
do
{
for (i=1;i<=n;++i)
viz[i]=0;
ok=0;
for (i=1;i<=n;++i)
if (L[i]==0 && cupleaza(i))
ok=1;
} while (ok);
for (i=1;i<=n;++i)
if (L[i])
++sol;
fout<<sol<<"\n";
for (i=1;i<=n;++i)
if (L[i])
fout<<i<<" "<<L[i]<<"\n";
return 0;
}