Pagini recente » Cod sursa (job #1211887) | Cod sursa (job #1768334) | Cod sursa (job #987113) | Cod sursa (job #2267141) | Cod sursa (job #1235935)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
int n,m,e,i,L[10010],R[10010],v[10010],cuplaj,x,y,ok;
vector <int> l[10010];
bool cupleaza (int nod) {
v[nod]=1;
for (int i=0;i<l[nod].size();i++)
if (!R[l[nod][i]]){
L[nod]=l[nod][i];
R[l[nod][i]]=nod;
return 1;
}
for (int i=0;i<l[nod].size();i++)
if (!v[R[l[nod][i]]]&&cupleaza(R[l[nod][i]])){
L[nod]=l[nod][i];
R[l[nod][i]]=nod;
return 1;
}
return 0;
}
int main () {
fin>>n>>m>>e;
while (e--) {
fin>>x>>y;
l[x].push_back(y);
}
e=max(n,m);
do {
ok=0;
for (i=1;i<=e;i++)
v[i]=0;
for (i=1;i<=n;i++)
if (!L[i]&&cupleaza(i)) {
cuplaj++;
ok=1;
}
}while (ok);
fout<<cuplaj<<"\n";
for (i=1;i<=n;i++)
if (L[i])
fout<<i<<" "<<L[i]<<"\n";
return 0;
}