Pagini recente » Cod sursa (job #220039) | Cod sursa (job #3207238) | Cod sursa (job #670859) | Cod sursa (job #1653435) | Cod sursa (job #801492)
Cod sursa(job #801492)
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int x1,y1,i,n,m,e,ok,nr,u[10002],st[10002],dr[10002];
vector < int > h[10003];
int cupleaza(int nod)
{
int i,j;
if(u[nod]==1) return 0;
u[nod]=1;
for(j=0;j<h[nod].size();j++)
{
i=h[nod][j];
if(dr[i]==0)
{
dr[i]=nod;
st[nod]=i;
return 1;
}
}
for(j=0;j<h[nod].size();j++)
{
i=h[nod][j];
if(dr[i]>0)
if(cupleaza(dr[i]))
{
dr[i]=nod;
st[nod]=i;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
for(i=1;i<=e;i++)
{
scanf("%d",&x1);
scanf("%d",&y1);
h[x1].push_back(y1);
}
ok=1;
nr=0;
while(ok==1)
{
ok=0;
memset(u,0,sizeof(u));
for(i=1;i<=n;i++)
if(st[i]==0)
if(cupleaza(i))
{
ok=1;
nr++;
}
}
printf("%d\n",nr);
for(i=1;i<=n;i++)
if(st[i]) printf("%d %d\n",i,st[i]);
return 0;
}