Pagini recente » Cod sursa (job #562300) | Cod sursa (job #611877) | Cod sursa (job #877101) | Cod sursa (job #1769121) | Cod sursa (job #612997)
Cod sursa(job #612997)
#include <fstream>
#include <vector>
#include <cstring>
#define max_n 10001
using namespace std;
int n1,n2,e,nr,i,x,y;
vector <int> g[max_n];
bool ok[max_n];
int st[max_n],dr[max_n];
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int cupleaza(int x) {
int i;
vector <int>::iterator it;
if (ok[x]) return 0;
ok[x]=true;
for (it=g[x].begin(); it!=g[x].end(); it++) {
i=*it;
if (!dr[i]) {
st[x]=i;
dr[i]=x;
return 1;
}
}
for (it=g[x].begin(); it!=g[x].end(); it++) {
i=*it;
if (cupleaza(dr[i])) {
st[x]=i;
dr[i]=x;
return 1;
}
}
return 0;
}
void solve() {
int i;
for (i=1; i<=n1; i++) {
if (!st[i]) {
if (cupleaza(i)) nr++;
else {
memset(ok,false,sizeof(ok));
if (cupleaza(i)) nr++;
}
}
}
}
int main () {
in >> n1 >> n2 >> e;
for (i=1; i<=e; i++) {
in >> x >> y;
g[x].push_back(y);
}
memset(st,0,sizeof(st));
memset(dr,0,sizeof(dr));
memset(ok,false,sizeof(ok));
nr=0;
solve();
out << nr << '\n';
for (i=1; i<=n1; i++)
if (st[i]>0) out << i << ' ' << st[i] << '\n';
return 0;
}