Pagini recente » Cod sursa (job #2471974) | Cod sursa (job #1790578) | Cod sursa (job #1349478) | Cod sursa (job #663194) | Cod sursa (job #1914304)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector <int> G[20000];
int viz[100000],x,y,n,m,e,dr[100000],st[10000];
void refill()
{
for(int i=0;i<=n;i++)
viz[i]=0;
}
int cuplaj(int i)
{
if(viz[i]!=0) return 0;
viz[i]=1;
vector <int>::iterator it;
for(it=G[i].begin();it<G[i].end();it++)
{
if(!dr[*it])
{
st[i]=*it;
dr[*it]=i;
return 1;
}
}
for(it=G[i].begin();it<G[i].end();it++)
{
if(cuplaj(dr[*it]))
{
st[i]=*it;
dr[*it]=i;
return 1;
}
}
return 0;
}
void citire()
{
scanf("%d%d%d",&n,&m,&e);
for(int i=1;i<=e;i++)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
}
}
void cerinta()
{
int ok=1;
citire();
while(ok!=0)
{
ok=0;
refill();
for(int i=1;i<=n;i++)
if(st[i]==0)
ok+=cuplaj(i);
}
int nr=0;
for(int i=1;i<=n;i++)
if(st[i]!=0)
nr++;
printf("%d\n",nr);
for(int i=1;i<=n;i++)
if(st[i]!=0)
{
printf("%d %d\n",i,st[i]);
}
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
cerinta();
// cout << "Hello world!" << endl;
return 0;
}