Pagini recente » Cod sursa (job #2606826) | Cod sursa (job #980640) | Cod sursa (job #101576) | Cod sursa (job #1357920) | Cod sursa (job #729809)
Cod sursa(job #729809)
#include <fstream>
#include <vector>
#define lung 10004
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int> v[lung];
int n,m,e,cuplu,dreapta[lung],stanga[lung];
bool viz[lung];
inline bool cuplez(int nod)
{int y,i;
if (viz[nod])
return false;
viz[nod] = true;
for(i=0;i<v[nod].size();i++)
{ y = v[nod][i];
if (!stanga[y] || cuplez(stanga[y]))//nu are vecin sau are vecin dar il pot cupla cu altul
{ dreapta[nod] = y;
stanga[y] = nod;
return true;
}
}
return false;
}
int main()
{int i,x,y;
bool cupleaza;
fin >> n >> m >> e;
while (e--)
{ fin >> x >> y;
v[x].push_back(y);
}
cupleaza = true;
while(cupleaza)
{ cupleaza = false;
for(i=1;i<=n;i++)
viz[i]=0;
for(i=1;i<=n;i++)
if (!dreapta[i] && cuplez(i))//nu are vecin in dreapta si il pot cupla
{ cupleaza = 1;
cuplu++;
}
}
fout << cuplu << '\n';
for(i=1;i<=n;i++)
if (dreapta[i])
fout << i << ' ' << dreapta[i] << '\n';
return 0;
}