Pagini recente » Cod sursa (job #2857024) | Cod sursa (job #2051799) | Cod sursa (job #1288750) | Cod sursa (job #2020686) | Cod sursa (job #553550)
Cod sursa(job #553550)
#include <cstdio>
using namespace std;
FILE *fin=fopen("cuplaj.in","r");
FILE *fout=fopen("cuplaj.out","w");
#define NMAX 100005
int n,m,t,sol;
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;
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++)
{
if(cuplaj(i))
++sol;
}
fprintf(fout,"%d\n",sol);
for(i=1;i<=n;i++)
{
if(gd[i])
fprintf(fout,"%d %d\n",i,gd[i]);
}
return 0;
}