Pagini recente » Cod sursa (job #1234425) | Cod sursa (job #1582286) | Cod sursa (job #1269457) | Cod sursa (job #1807404) | Cod sursa (job #589901)
Cod sursa(job #589901)
#include <stdio.h>
#include <vector>
#define MA 10005
using namespace std;
int N,M,E;
int rez,L[MA],R[MA],VIZ[MA];
vector <int> A[MA];
FILE *f,*g;
void read()
{
int i,x,y;
fscanf(f,"%d %d %d",&N,&M,&E);
for (i=1;i<=E;++i)
{
fscanf(f,"%d %d",&x,&y);
A[x].push_back(y);
}
}
bool cuplez(int nod)
{
int z;
if (VIZ[nod]==1)
return 0;
VIZ[nod]=1;
for (vector <int> :: iterator it=A[nod].begin();it!=A[nod].end();it++)
if (R[*it]==0)
{
L[nod]=*it;
R[*it]=nod;
return 1;
}
for (vector <int> :: iterator it=A[nod].begin();it!=A[nod].end();it++)
{
z=*it;
if (cuplez(R[z]))
{
L[nod]=z;
R[z]=nod;
return 1;
}
}
return 0;
}
void solve()
{
int i,ok;
rez=0;
ok=1;
while (ok)
{
ok=0;
memset(VIZ,0,sizeof(VIZ));
for (i=1;i<=N;++i)
if (L[i]==0)
{
if (cuplez(i))
{
rez++;
ok=1;
}
}
}
}
void print()
{
int i;
fprintf(g,"%d\n",rez);
for (i=1;i<=N;++i)
if (L[i]!=0)
fprintf(g,"%d %d\n",i,L[i]);
}
int main()
{
f=fopen("cuplaj.in","r");
g=fopen("cuplaj.out","w");
read();
solve();
print();
fclose(f);
fclose(g);
return 0;
}