Pagini recente » Cod sursa (job #2030971) | Cod sursa (job #2031104) | Cod sursa (job #1946631) | Cod sursa (job #2348621) | Cod sursa (job #1496110)
#include<fstream>
#include<vector>
#include<cstring>
#define DIM 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int L[DIM],R[DIM],f[DIM],sol;
vector<int> v[DIM];
int cupleaza(int nod){
if(f[nod]==1)
return 0;
f[nod]=1;
int vecin=0;
for(int i=0;i<v[nod].size();i++){
vecin=v[nod][i];
if(R[vecin]==0){
L[nod]=vecin;
R[vecin]=nod;
sol++;
return 1;
}
}
for(int i=0;i<v[nod].size();i++){
vecin=v[nod][i];
if( cupleaza(R[vecin]) ){
L[nod]=vecin;
R[vecin]=nod;
return 1;
}
}
return 0;
}
int n,m,k,i,ok,x,y;
int main(){
fin>>n>>m>>k;
for(i=1;i<=k;i++){
fin>>x>>y;
v[x].push_back(y);
}
ok=1;
while(ok==1){
memset(f,0,sizeof(f));
ok=0;
for(i=1;i<=n;i++){
if(L[i]==0 && cupleaza(i)){
ok=1;
}
}
}
fout<<sol<<"\n";
for(i=1;i<=n;i++){
if(L[i]!=0){
fout<<i<<" "<<L[i]<<"\n";
}
}
return 0;
}