Pagini recente » Cod sursa (job #2156436) | Cod sursa (job #2578848) | Cod sursa (job #2954305) | Cod sursa (job #2345627) | Cod sursa (job #2979789)
#include <fstream>
#include <cstring>
#include <vector>
#define DIM 10001
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,k,x,y,cnt,st[DIM],dr[DIM];
bool ok,f[DIM];
vector<int> l[DIM];
bool cupleaza(int nod) {
if (f[nod]==1)
return 0;
f[nod]=1;
for (int i=0;i<l[nod].size();i++) {
int vec=l[nod][i];
if (dr[vec]==0) {
st[nod]=vec;
dr[vec]=nod;
cnt++;
return 1;
}
}
for (int i=0;i<l[nod].size();i++) {
int vec=l[nod][i];
if (cupleaza(dr[vec])==1) {
st[nod]=vec;
dr[vec]=nod;
return 1;
}
}
return 0;
}
int main() {
fin>>n>>m>>k;
while (k--) {
fin>>x>>y;
l[x].push_back(y);
}
do {
ok=0;
memset(f,0,sizeof(f));
for (int i=1;i<=n;i++)
if (st[i]==0 && cupleaza(i)==1)
ok=1;
} while (ok==1);
fout<<cnt<<"\n";
for (int i=1;i<=n;i++)
if (st[i]!=0)
fout<<i<<" "<<st[i]<<"\n";
return 0;
}