Pagini recente » Cod sursa (job #3257243) | Cod sursa (job #3031972) | Cod sursa (job #2542516) | Cod sursa (job #3151165) | Cod sursa (job #482282)
Cod sursa(job #482282)
#include<algorithm>
#include<vector>
using namespace std;
#define N_MAX 10002
int ut[N_MAX];
int st[N_MAX],dr[N_MAX];
int n,m,e,x,y,i,j;
vector <int> a[N_MAX];
vector <pair <int,int> > sol;
int pairUp(int nod)
{
if(ut[nod])
return 0;
ut[nod]=1;
vector <int> ::iterator it;
for(it=a[nod].begin();it!=a[nod].end();it++)
{
if(st[*it]==0)
{
st[*it]=nod;
dr[nod]=*it;
return 1;
}
if(pairUp(st[*it]))
{
st[*it]=nod;
dr[nod]=*it;
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%d",&x,&y);
a[x].push_back(y);
}
while(1)
{
memset(ut+1,0,sizeof(int)*n);
int ok=0;
for(i=1;i<=n;i++)
if(dr[i]==0)
if(pairUp(i))
ok=1;
if(!ok)
break;
}
for(i=1;i<=n;i++)
if(dr[i])
sol.push_back(make_pair(i,dr[i]));
printf("%d\n",(int)sol.size());
for(i=0;i<(int)sol.size();i++)
printf("%d %d\n",sol[i].first,sol[i].second);
return 0;
}