Pagini recente » Cod sursa (job #2076345) | Cod sursa (job #1377014)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int m,n,e,st[10011],dr[10011],poz[10011],nr,i,x,y;
int uok=true;;
vector <int> graf[100101];
int cuplaj(int i);
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 %d",&x,&y);
graf[x].push_back(y);
}
while(uok)
{
for(i=1; i<=n; i++)
poz[i]=false;
uok=0;
for(i=1;i<=n;++i)
{
if(st[i]==0)
uok+=cuplaj(i); // am cuplat, mai merg in while
}
}
for(i=1;i<=n;++i)
if(st[i])
nr++;
printf("%d\n",nr);
for(i=1;i<=n;++i)
if(st[i])
printf("%d %d\n",i,st[i]);
return 0;
}
int cuplaj( int i)
{
if(poz[i]) // deja vizitat
return 0;
poz[i]=true;
for(int h=0; h<graf[i].size(); h++)
{
int next=graf[i][h];
if(!dr[next] || cuplaj(dr[next])) // daca este cuplat gasesc alta varianta de cuplare ...daca nu cuplez pur si simplu
{
st[i]=next;
dr[next]=i;
return 1;
}
}
return 0;
}