Pagini recente » Cod sursa (job #2259678) | Cod sursa (job #546461) | Cod sursa (job #197595) | Cod sursa (job #1214102) | Cod sursa (job #928719)
Cod sursa(job #928719)
#include<cstdio>
#include<vector>
#include<cstring>
#define N 10003
using namespace std;
int rez,dr[N],st[N],x,y,i,na,nb,m;
int ok,viz[N];
struct nod{int info;nod*adr;}*v[N],*p;
int dfs(int nd)
{
if(viz[nd]) return 0;
viz[nd]=1;
nod *p=v[nd];
while(p)
{
if(!st[p->info])
{
st[p->info]=nd;
dr[nd]=p->info;
rez++;
return 1;
}
p=p->adr;
}
p=v[nd];
while(p)
{
if(dfs(st[p->info]))
{
dr[nd]=p->info;
st[p->info]=nd;
return 1;
}
p=p->adr;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&na,&nb,&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
p=new nod;
p->info=y; p->adr=v[x]; v[x]=p;
}
ok=1;
while(ok)
{
ok=0;
memset(viz,false,sizeof(viz));
for(i=1;i<=na;i++)
if(!dr[i])
if(dfs(i)) ok=1;
}
printf("%d\n",rez);
for (i=1;i<=na;i++)
if (dr[i]) printf("%d %d\n",i,dr[i]);
return 0;
}