Pagini recente » Cod sursa (job #586347) | Cod sursa (job #1907055) | Cod sursa (job #1882905) | Cod sursa (job #2145062) | Cod sursa (job #1850093)
#include <fstream>
#include <vector>
#include <cstring>
#define Nmax 10001
using namespace std;
ofstream g("cuplaj.out");
int n,m,e,S[Nmax],nr,D[Nmax];
bool uz[Nmax];
vector<int> V[Nmax];
bool cup(int nod)
{
uz[nod] = 1;
for (int i=0;i<V[nod].size();i++)
{
if (!D[V[nod][i]])
{
S[nod] = V[nod][i];
D[V[nod][i]] = nod;
nr++;
return 1;
}
}
for (int i=0;i<V[nod].size();i++)
{
if(!uz[D[V[nod][i]]] && cup(D[V[nod][i]]))
{
S[nod] = V[nod][i];
D[V[nod][i]] = nod;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
scanf("%ld%ld%ld",&n,&m,&e);
for (int i=1;i<=e;i++)
{
int x,y;
scanf("%ld%ld",&x,&y);
V[x].push_back(y);
}
bool ok = 1;
while (ok)
{
ok = 0;
memset(uz,0,sizeof(uz));
for (int i=1;i<=n;i++)
{
if (!uz[i] && !S[i])
ok |= cup(i);
}
}
g<<nr<<'\n';
for (int i=1;i<=n;i++)
{
if (S[i])
g<<i<<' '<<S[i]<<'\n';
}
return 0;
}