Pagini recente » Cod sursa (job #3124598) | Cod sursa (job #3291383) | Cod sursa (job #2028856) | Cod sursa (job #2411538) | Cod sursa (job #553539)
Cod sursa(job #553539)
#include <cstdio>
using namespace std;
FILE *fin=fopen("cuplaj.in","r");
FILE *fout=fopen("cuplaj.out","w");
#define NMAX 100001
int n,m,t;
struct graf {
graf *urm;
int x;
}*G[NMAX];
int gs[NMAX],gd[NMAX];
void add(graf *&g,int x)
{
graf *p=new graf;
p->x=x;
p->urm=g;
g=p;
}
bool cuplaj(int nod)
{
for(graf *g=G[nod];g!=NULL;g=g->urm)
{
if(!gs[g->x])
{
gd[nod]=g->x;
gs[g->x]=nod;
return true;
}
}
for(graf *g=G[nod];g!=NULL;g=g->urm)
{
if(gs[g->x]!=nod&&cuplaj(gs[g->x]))
{
gd[nod]=g->x;
gs[g->x]=nod;
return true;
}
}
return false;
}
int main()
{
int i,x,y,num=0;
fscanf(fin,"%d %d %d",&n,&m,&t);
for(i=1;i<=t;i++)
{
fscanf(fin,"%d %d",&x,&y);
add(G[x],y);
}
for(i=1;i<=n;i++)
{
num+=cuplaj(i);
}
fprintf(fout,"%d\n",num);
for(i=1;i<=n;i++)
{
if(gd[i])
fprintf(fout,"%d %d\n",i,gd[i]);
}
return 0;
}