Pagini recente » Cod sursa (job #126507) | Cod sursa (job #1844277) | Cod sursa (job #3282457) | Cod sursa (job #519874) | Cod sursa (job #1389596)
#include <fstream>
#include <vector>
#define NMAX 10001
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector<int> G[NMAX];
int n1, n2, m, i, j, nr, U[NMAX], st[NMAX], dr[NMAX];
int Cupleaza(int nod)
{ if (U[nod])
return 0;
U[nod]=1;
int k;
for (k=0; k<G[nod].size(); ++k)
if (!st[G[nod][k]] || Cupleaza(st[G[nod][k]]))
{ st[G[nod][k]]=nod;
dr[nod]=G[nod][k];
return 1;
}
return 0;
}
int main()
{ f>>n1>>n2>>m;
for (; m; --m)
{ f>>i>>j;
G[i].push_back(j);
}
for (i=1; i<=n1; ++i)
if (!dr[i])
{ for (j=1; j<=n1; ++j)
U[j]=0;
if (Cupleaza(i))
++nr;
}
g<<nr<<'\n';
for (i=1; i<=n1; ++i)
if (dr[i])
g<<i<<' '<<dr[i]<<'\n';
return 0;
}