Pagini recente » Cod sursa (job #2279932) | Cod sursa (job #2089069) | Cod sursa (job #2023032) | Cod sursa (job #3204158) | Cod sursa (job #1342660)
#include <fstream>
#include <cstring>
#include <vector>
#define DIM 100011
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n,m,q,sol;
int L[DIM],R[DIM],viz[DIM];
vector<int> C[DIM];
bool cuplaj(int nod){
vector<int>::iterator it;
if(viz[nod])
return 0;
viz[nod]=1;
//I:
for(it=C[nod].begin();it!=C[nod].end();it++){
if(!R[*it]){
L[nod]=*it;
R[*it]=nod;
return true;
}
}
//II:
bool rez;
for(it=C[nod].begin();it!=C[nod].end();it++){
rez=cuplaj(R[*it]);
if(rez){
L[nod]=*it;
R[*it]=nod;
return true;
}
}
return false;
}
int main(void){
register int i,j,x,y;
bool ok,rez;
f>>n>>m>>q;
for(i=1;i<=q;i++)
f>>x>>y,C[x].push_back(y);
do{ok=false;
for(i=1;i<=n;i++){
if(!L[i])
rez=cuplaj(i);
if(rez)
ok=true;
}
memset(viz,0,sizeof(viz));
}while(ok);
for(i=1;i<=n;i++)
sol+=(L[i]==0?0:1);
g<<sol<<"\n";
for(i=1;i<=n;i++)
if(L[i]) g<<i<<" "<<L[i]<<"\n";
f.close();
g.close();
return 0;
}