Pagini recente » Cod sursa (job #2077017) | Cod sursa (job #2465763) | Cod sursa (job #313893) | Cod sursa (job #3003441) | Cod sursa (job #927648)
Cod sursa(job #927648)
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
#define max 10002
int n,m,k;
int d[max],r[max];
bool u[max];
vector<int> roads[max];
int pairemup(int i)
{
if(u[i]) return 0;
u[i]=1;
for(vector<int>::iterator it=roads[i].begin(); it!=roads[i].end();it++)
if(!r[*it])
{
d[i]=*it;
r[*it]=i;
return 1;
}
for(vector<int>::iterator it=roads[i].begin(); it!=roads[i].end();it++)
if(pairemup(*it))
{
d[i]=*it;
r[*it]=i;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&k);
int x,y;
for(int i=1;i<=k;i++)
{
scanf("%d %d",&x,&y);
roads[x].push_back(y);
}
int change=1;
while(change)
{
change=0;
memset(u,0,sizeof(u));
for(int i=1;i<=n;i++)
if(!d[i])
change |= pairemup(i);
}
int nrcup=0;
for(int i=1;i<=n;i++)
nrcup+= ( d[i]>0 );
printf("%d\n",nrcup);
for(int i=1;i<=n;i++)
if(d[i]>0)
printf("%d %d\n",i,d[i]);
return 0;
}