Pagini recente » Cod sursa (job #1864797) | Cod sursa (job #1680069) | Cod sursa (job #2087590) | Istoria paginii runda/simulare-cartita-36 | Cod sursa (job #2419029)
#include <fstream>
#include <vector>
#include <bitset>
#define DIM 10010
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,e,i,it,x,y,sol,ok,l[DIM],r[DIM];
bitset<DIM> f;
vector<int> v[DIM];
int cupleaza(int nod) {
if (f[nod]==1)
return 0;
f[nod]=1;
for (int i=0;i<v[nod].size();i++) {
int 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++) {
int vecin=v[nod][i];
if (cupleaza(r[vecin])) {
l[nod]=vecin;
r[vecin]=nod;
return 1;
}
}
return 0;
}
int main() {
fin>>n>>m>>e;
for (i=1;i<=e;i++) {
fin>>x>>y;
v[x].push_back(y);
}
do {
ok=0;
f.reset();
for (i=1;i<=n;i++) {
if (l[i]==0)
ok|=cupleaza(i);
}
} while (ok==1);
fout<<sol<<"\n";
for (i=1;i<=n;i++) {
if (l[i]!=0)
fout<<i<<" "<<l[i]<<"\n";
}
return 0;
}