Pagini recente » Cod sursa (job #596667) | Cod sursa (job #1848754) | Cod sursa (job #686475) | Cod sursa (job #2818428) | Cod sursa (job #1644374)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g1("cuplaj.out");
int g[10001][10001],st[10001],dr[10001],nr,n1,n2,x,y,m;
char u[10001];
int cupleaza(int nod)
{ int i;
if(u[nod]) return 0;
u[nod]=1;
for(int i=1;i<=n2;i++)
{ if(!g[nod][i]) continue;
if(!dr[i]||cupleaza(dr[i]))
{ st[nod]=i;
dr[i]=nod;
return 1;
}
}
return 0;
}
void cuplaj()
{int i;
for(i=1;i<=n1;i++)
{ if(st[i]) continue;
if(cupleaza(i)) nr++;
else
{memset(u,0,sizeof(u));
if(cupleaza(i)) nr++;
}
}
}
void citire ()
{ f>>n1>>n2>>m;
for(int i=1;i<=m;i++)
{ f>>x>>y;
g[x][y]=1;
}
}
int main()
{ citire();
cuplaj();
g1<<nr<<endl;
for(int i=1;i<=n1;i++)
if(st[i]) g1<<i<<' '<<st[i]<<endl;
return 0;
}