Pagini recente » Cod sursa (job #2275577) | Cod sursa (job #1728967) | Cod sursa (job #1025819) | Cod sursa (job #2135758) | Cod sursa (job #1166218)
#include<cstdio>
#include<vector>
#include<cstring>
#define maxx 10001
using namespace std;
FILE *f=fopen("cuplaj.in","r");
FILE *g=fopen("cuplaj.out","w");
vector<int>L[maxx];
bool viz[maxx];
int part1[maxx],part2[maxx];
int potrivire(int nodcur)
{
int j,vecin;
if(viz[nodcur])return 0;
viz[nodcur]=true;
for(j=0;j<L[nodcur].size();j++)
{
vecin=L[nodcur][j];
if(part2[vecin]==0)
{
part1[nodcur]=vecin;
part2[vecin]=nodcur;
return 1;
}
}
for(j=0;j<L[nodcur].size();j++)
{
vecin=L[nodcur][j];
if(potrivire(part2[vecin]))
{
part1[nodcur]=vecin;
part2[vecin]=nodcur;
return 1;
}
}
return 0;
}
int main()
{
int i,n,m,e,ok,nr=0,x,y;
fscanf(f,"%d%d%d",&n,&m,&e);
for(i=1;i<=e;i++)
{
fscanf(f,"%d%d",&x,&y);
L[x].push_back(y);
}
ok=1;
while(ok)
{
ok=0;
memset(viz,false,sizeof(viz));
for(i=1;i<=n;i++)
if(part1[i]==0)ok+=potrivire(i);
}
for(i=1;i<=n;i++)
if(part1[i])nr++;
fprintf(g,"%d\n",nr);
for(i=1;i<=n;i++)
if(part1[i])
fprintf(g,"%d %d\n",i,part1[i]);
return 0;
}