Pagini recente » Cod sursa (job #754172) | Cod sursa (job #470845) | Cod sursa (job #2920708) | Cod sursa (job #1606332) | Cod sursa (job #415287)
Cod sursa(job #415287)
#include <string>
#include <vector>
#include <cstdio>
#define N 20001
using namespace std;
int viz[N];
vector<int> v[N];
int pereche[N];
int n1,n2,m;
int df(int k)
{int i,vec,pk;
viz[k]=1;
for (i=0;i<v[k].size();i++)
{vec=v[k][i];
if(viz[vec]==0)
{if(pereche[vec]!=0)
{viz[vec]=1;
if(df(pereche[vec]))
{pereche[vec]=k;
pereche[k]=vec;
return 1;
}
}
else
{viz[vec]=1;
pereche[k]=vec;
pereche[vec]=k;
return 1;
}
}
}
return 0;
}
int main ()
{freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n1,&n2,&m);
int i,j,x,y,n=n1+n2;
for (i=1;i<=m;i++)
{scanf("%d %d",&x,&y);
y+=n1;
v[x].push_back(y);
v[y].push_back(x);
}
int modificare=1;
while(modificare)
{modificare=0;
for (i=1;i<=n;i++)
{if(!pereche[i])
{if(df(i))
{modificare=1;
}
}
}
memset(viz,0,sizeof(viz));
}
int nr;
for (i=1,nr=0;i<=n1;i++)
{if(pereche[i]!=0)
{nr++;
}
}
printf("%d\n",nr);
for (i=1;i<=n1;i++)
{if(pereche[i]!=0)
printf("%d %d\n",i,pereche[i]-n1);
}
return 0;
}