Pagini recente » Cod sursa (job #2735126) | Cod sursa (job #1389212) | Cod sursa (job #1687227) | Cod sursa (job #581891) | Cod sursa (job #1824218)
#include <fstream>
#include <cstdio>
#include <vector>
#include <cstring>
#define Nmax 10000
using namespace std;
ofstream g("cuplaj.out");
vector<int> A[Nmax+1];
int n,m,e,l[Nmax+1],r[Nmax+1];
bool uz[Nmax+1];
bool cupleaza(int nod)
{
uz[nod] = 1;
for (int i=0;i<A[nod].size();i++)
{
int crt = A[nod][i];
if(!r[crt])
{
r[crt] = nod;
l[nod] = crt;
return 1;
}
}
for (int i=0;i<A[nod].size();i++)
{
int crt = A[nod][i];
if (!uz[r[crt]] && cupleaza(r[crt]))
{
r[crt] = nod;
l[nod] = crt;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
scanf("%d%d%d",&n,&m,&e);
for (int i=1;i<=e;i++)
{
int x,y;
scanf("%d%d",&x,&y);
A[x].push_back(y);
}
bool change;
do
{
change = 0;
memset(uz,0,sizeof(uz));
for (int i=1;i<=n;i++)
{
if (!l[i])
change |= cupleaza(i);
}
}while (change);
int nr=0;
for (int i=1;i<=n;i++)
{
if (l[i])
nr++;
}
g<<nr<<'\n';
for (int i=1;i<=n;i++)
{
if (l[i])
g<<i<<' '<<l[i]<<'\n';
}
return 0;
}