Pagini recente » Cod sursa (job #2211425) | Cod sursa (job #1289571) | Rating Monica Ioanidis (MonicaIoanidis) | Cod sursa (job #94754) | Cod sursa (job #1172051)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
vector<int> V[10005];
int n1,n2,m,i,x,y,sol;
int L[10005],R[10005];
bool viz[10005],ok;
bool cuplaj(int nod) {
if(viz[nod]==1)
return 0;
viz[nod]=1;
vector<int>::iterator it;
for(it=V[nod].begin();it!=V[nod].end();it++) {
if(R[*it]==0) {
R[*it]=nod;
L[nod]=*it;
return 1;
}
}
for(it=V[nod].begin();it!=V[nod].end();it++)
if(cuplaj(R[*it])) {
R[*it]=nod;
L[nod]=*it;
return 1;
}
return 0;
}
int main() {
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
f>>n1>>n2>>m;
for(i=1;i<=m;i++) {
f>>x>>y;
V[x].push_back(y);
}
do {
ok=0;
memset(viz,0,n1+1);
for(i=1;i<=n1;i++)
if(L[i]==0 && cuplaj(i)) {
ok=1;
sol++;
}
} while(ok);
g<<sol<<"\n";
for(i=1;i<=n1;i++)
if(L[i]!=0)
g<<i<<" "<<L[i]<<"\n";
return 0;
}