Pagini recente » Cod sursa (job #2973069) | Cod sursa (job #2156583) | Istoria paginii runda/test3101 | Calibrare limite de timp | Cod sursa (job #301336)
Cod sursa(job #301336)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int N_MAX = 100001;
int n,m,e, rez;
bool view[N_MAX];
int cuplaj[N_MAX];
vector<int> G[N_MAX];
int pair_up ( int nod ) {
if (view[nod])
return 0;
for (vector<int>::iterator it = G[nod].begin(); it != G[nod].end(); ++it) {
if (!cuplaj[*it]) {
cuplaj[*it] = nod;
return 1;
}
}
for (vector<int>::iterator it = G[nod].begin(); it != G[nod].end(); ++it) {
if (cuplaj[*it] && cuplaj[*it] != nod && pair_up(cuplaj[*it])) {
cuplaj[*it] = nod;
return 1;
}
}
return 0;
}
int main() {
freopen("cuplaj.in","rt",stdin);
freopen("cuplaj.out","wt",stdout);
scanf("%d %d %d",&n,&m,&e);
for (int i = 0, a,b; i < e; ++i) {
scanf("%d %d",&a,&b);
G[a].push_back(b);
}
for (int i = 1; i <= n; ++i) {
memset(view,0,sizeof(view));
rez += pair_up(i);
}
printf("%d\n",rez);
for (int i = 1; i <= m; ++i)
if (cuplaj[i])
printf("%d %d\n",cuplaj[i],i);
return 0;
}