Pagini recente » Cod sursa (job #815991) | Utilizatori inregistrati la Infoarena Cup 2012 | Cod sursa (job #419586) | Cod sursa (job #2091571) | Cod sursa (job #724534)
Cod sursa(job #724534)
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
#define NMAX 10005
FILE *f=fopen("cuplaj.in","r");
FILE *g=fopen("cuplaj.out","w");
vector<int> ST[NMAX];
long n,m,e,cst[NMAX],cdr[NMAX],U[NMAX],nr;
int cupleaza(long nod)
{
if (U[nod]) return 0;
U[nod]=1;
for (long i=0;i<ST[nod].size();i++)
{
long nod_dr=ST[nod][i];
if (!cdr[nod_dr] || cupleaza( cdr[nod_dr] ) )
{ cdr[nod_dr]=nod;
cst[nod]=nod_dr;
return 1;
}
}
return 0;
}
int main()
{
fscanf(f,"%ld%ld%ld",&n,&m,&e);
for (long i=1;i<=e;i++)
{long x,y;
fscanf(f,"%ld%ld",&x,&y);
ST[x].push_back(y);
}
for (long i=1;i<=n;i++)
{
if (cst[i]) continue;
if ( cupleaza(i) ) nr++;
else
{ memset(U,0,sizeof(U));
if ( cupleaza(i) ) nr++;
}
}
fprintf(g,"%ld\n",nr);
for (long i=1;i<=n;i++)
if(cst[i])
fprintf(g,"%ld %ld\n",i,cst[i]);
return 0;}