Pagini recente » Cod sursa (job #60602) | Cod sursa (job #2976334) | Cod sursa (job #69957) | Cod sursa (job #969683) | Cod sursa (job #1389594)
#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])
{ if (Cupleaza(i))
++nr;
else
{ 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;
}