Pagini recente » Cod sursa (job #3178287) | Cod sursa (job #2305149) | Cod sursa (job #2612465) | Cod sursa (job #2819195) | Cod sursa (job #434343)
Cod sursa(job #434343)
#include<stdio.h>
#include<vector>
#define N 10500
#define pb push_back
using namespace std;
int s[N], d[N], viz[N], n, m, e, ok, x;
vector< int > a[N];
void citire(){
int i, x, y;
scanf("%d %d %d", &n, &m, &e);
for (i = 1; i <= e; i++){
scanf("%d %d", &x, &y);
a[x].pb(y);
}
}
int cuplaj(int nod){
int i;
if (viz[nod]) return 0;
viz[nod] = 1;
for (i = 0; i < a[nod].size(); ++i)
if(!s[a[nod][i]]){
s[a[nod][i]] = nod;
d[nod] = a[nod][i];
return 1;
}
for (i = 0; i < a[nod].size(); ++i)
if (cuplaj(s[a[nod][i]])){
s[a[nod][i]] = nod;
d[nod] = a[nod][i];
return 1;
}
return 0;
}
int main(){
int i;
freopen("cuplaj.in","r", stdin);
freopen("cuplaj.out","w", stdout);
citire();
ok = 1;
while (ok){
ok = 0;
memset(viz, 0, sizeof(viz));
for (i = 1; i <= n; ++i)
if (!d[i])
if (cuplaj(i)){
++x;
ok = 1;
}
}
printf("%d\n", x);
for (i = 1; i <= n; i++)
if (d[i])
printf("%d %d\n", i, d[i]);
return 0;
}