Pagini recente » Cod sursa (job #2682473) | concurs1cls | Cod sursa (job #3162004) | Cod sursa (job #1611143) | Cod sursa (job #415272)
Cod sursa(job #415272)
#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;
pk=pereche[k];
for (i=0;i<v[k].size();i++)
{vec=v[k][i];
if(pk==vec) continue;
if(viz[vec]==0)
{if(pereche[vec]!=0)
{viz[vec]=1;
if(df(pereche[vec]))
{pereche[vec]=k;
pereche[k]=vec;
return 1;
}
}
else
{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);
}
for (i=1;i<=n;i++)
{memset(viz,0,sizeof(viz));
if(!pereche[i])
{df(i);
}
}
for (i=1;i<=n1;i++)
{if(pereche[i]!=0)
printf("%d %d\n",i,pereche[i]-n1);
}
return 0;
}