Pagini recente » Cod sursa (job #2509688) | Cod sursa (job #2400429) | Cod sursa (job #1944544) | Cod sursa (job #2550043) | Cod sursa (job #1500232)
#include <stdio.h>
#include <string.h>
#include <vector>
#define MAX 10005
using namespace std;
int n, m, e, i, x, y, pair1[MAX], pair2[MAX], nrcupl;
bool viz[MAX], stop;
vector<int> l[MAX];
int match(int n);
int main(){
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d%d%d", &n, &m, &e);
for(i = 0; i < e; i++){
scanf("%d%d", &x, &y);
l[x].push_back(y);
}
stop = 1;
while(stop){
memset(viz, 0, n + 1);
stop = 0;
for(int i = 1; i <= n; i++)
if(!pair1[i])
stop |= match(i);
}
for(i = 1; i <= n; i++)
if(pair1[i])
nrcupl++;
printf("%d\n", nrcupl);
for(i = 1; i <= n; i++)
if(pair1[i])
printf("%d %d\n", i, pair1[i]);
return 0;
}
int match(int n){
if(viz[n])
return 0;
viz[n] = 1;
for(int i = 0; i < l[n].size(); i++)
if(!pair2[l[n][i]]){
pair1[n] = l[n][i];
pair2[l[n][i]] = n;
return 1;
}
for(int i = 0; i < l[n].size(); i++)
if(match(pair2[l[n][i]])){
pair1[n] = l[n][i];
pair2[l[n][i]] = n;
return 1;
}
return 0;
}