Pagini recente » Cod sursa (job #2229051) | Cod sursa (job #1688848) | Cod sursa (job #2374559) | Cod sursa (job #1550605) | Cod sursa (job #867312)
Cod sursa(job #867312)
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#define nm 10100
#define FOR(i,v) for (vector <int> ::iterator i=v.begin();i!=v.end();i++)
using namespace std;
FILE *f,*g;
vector <int> a[nm];
int bf[nm],l[nm],r[nm];
int n,m,e,i,x,y,sol;
bool ok;
int add(int x)
{
if (bf[x]==1) return 0;
bf[x]=1;
FOR (i,a[x])
if (!r[*i])
{
l[x]=*i;
r[*i]=x;
return 1;
}
FOR (i,a[x])
if (add(r[*i]))
{
l[x]=*i;
r[*i]=x;
return 1;
}
return 0;
}
int main()
{
f=fopen("cuplaj.in","r");
g=fopen("cuplaj.out","w");
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);
}
for (ok=true;ok;)
{
for (i=1;i<=n;i++)
bf[i]=0;
for (i=1,ok=false;i<=n;i++)
if (!l[i])
ok|=add(i);
}
for (i=1;i<=n;i++)
if (l[i]>0) sol++;
fprintf(g,"%d\n",sol);
for (i=1;i<=n;i++)
if (l[i]>0)
fprintf(g,"%d %d\n",i,l[i]);
return 0;
}