Pagini recente » Cod sursa (job #108239) | Cod sursa (job #1574217) | Cod sursa (job #1539243) | Cod sursa (job #1534259) | Cod sursa (job #1812460)
#include <fstream>
#include <cstdio>
#include <vector>
#include <cstring>
#define Nmax 10000
using namespace std;
ofstream g("cuplaj.out");
vector<int> G[Nmax+1];
int n,m,e,x,y,l[Nmax+1],r[Nmax+1];
bool uz[Nmax+1],change;
bool cup(int nod)
{
uz[nod]=1;
for (int i=0;i<G[nod].size();i++)
{
int crt = G[nod][i];
if (!r[crt])
{
l[nod] = crt;
r[crt] = nod;
return true;
}
}
for (int i=0;i<G[nod].size();i++)
{
int crt = G[nod][i];
if (!uz[r[crt]] && cup(r[crt]))
{
r[crt] = nod;
l[nod] = crt;
return 1;
}
}
return false;
}
int main()
{
freopen("cuplaj.in","r",stdin);
scanf("%ld%ld%ld",&n,&m,&e);
for (int i=1;i<=e;i++)
{
scanf("%ld%ld",&x,&y);
G[x].push_back(y);
}
do
{
change = false;
memset(uz,0,sizeof(uz));
for (int i=1;i<=n;i++)
{
if (!l[i])
change |= cup(i);
}
}
while (change);
int nr=0;
for (int i=1;i<=n;i++)
nr += l[i]!=0;
g<<nr<<'\n';
for (int i=1;i<=n;i++)
if (l[i]!=0)
g<<i<<' '<<l[i]<<'\n';
return 0;
}