Pagini recente » Cod sursa (job #152821) | Cod sursa (job #1087589) | Cod sursa (job #2802392) | Cod sursa (job #1207810) | Cod sursa (job #641105)
Cod sursa(job #641105)
#include<fstream>
#include<vector>
using namespace std;
vector <short> v[10010];
int a,b,viz[10010],L[10010],R[10010],lvl=1,nr;
void afis() {
int nod;
ofstream out("cuplaj.out");
out<<nr<<'\n';
for(nod=1;nod<=a;nod++)
if(R[nod])
out<<nod<<' '<<R[nod]<<'\n';
out.close();
}
bool cuplaj(int nod) {
unsigned int i,vecin;
viz[nod]=lvl;
for(i=0;i<v[nod].size();i++) {
vecin=v[nod][i];
if(!L[vecin]) {
L[vecin]=nod;
R[nod]=vecin;
return 1;
}
}
for(i=0;i<v[nod].size();i++) {
vecin=v[nod][i];
if(viz[L[vecin]]!=lvl)
if(cuplaj(L[vecin])) {
L[vecin]=nod;
R[nod]=vecin;
return 1;
}
}
return 0;
}
void rez() {
int yvec=-1,ynou=0,nod;
while(yvec<ynou) {
yvec=ynou;
for(nod=1;nod<=a;nod++)
if(!R[nod])
if(cuplaj(nod))
ynou++;
lvl++;
}
nr=ynou;
}
void citire() {
int i,m,x,y;
ifstream in("cuplaj.in");
in>>a>>b>>m;
for(i=0;i<m;i++) {
in>>x>>y;
v[x].push_back(y);
}
in.close();
}
int main() {
citire();
rez();
afis();
return 0;
}