Pagini recente » Cod sursa (job #839507) | Cod sursa (job #2066102) | Cod sursa (job #2490485) | Cod sursa (job #2573241) | Cod sursa (job #1930627)
#include<bits/stdc++.h>
using namespace std;
#define NMAX 10100
#define MMAX 10100
int nxt[MMAX], last[NMAX], val[MMAX], viz[NMAX];
int cnt = 0;
inline void add(int a, int b){
cnt++;
val[cnt] = b;
nxt[cnt] = last[a];
last[a] = cnt;
}
int n, m, e, cupl_st[NMAX], cupl_dr[NMAX];
inline bool cuplaj(int a){
int p, nod;
if(viz[a])
return 0;
viz[a] = 1;
p = last[a];
while(p != 0){
nod = val[p];
if(cupl_dr[nod] == 0){
cupl_st[a] = nod;
cupl_dr[nod] = a;
return 1;
}
p = nxt[p];
}
p = last[a];
while(p != 0){
nod = val[p];
if(cuplaj(cupl_dr[nod])){
cupl_st[a] = nod;
cupl_dr[nod] = a;
return 1;
}
p = nxt[p];
}
return 0;
}
int main(){
FILE *in, *out;
in = fopen("cuplaj.in", "r");
out = fopen("cuplaj.out", "w");
int l, r;
fscanf(in, "%d%d%d", &n, &m, &e);
for(int i = 1; i <= e; i++){
fscanf(in, "%d%d", &l, &r);
add(l, r);
}
bool done = 1;
int rasp = 0;
while(done){
done = 0;
memset(viz, 0, sizeof viz);
for(int i = 1; i <= n; i++){
if((!cupl_st[i]) && cuplaj(i)){
rasp++;
done = 1;
}
}
}
fprintf(out, "%d\n", rasp);
for(int i = 1; i <= n; i++){
if(cupl_st[i]){
fprintf(out, "%d %d\n", i, cupl_st[i]);
}
}
return 0;
}