Pagini recente » Cod sursa (job #2555689) | Cod sursa (job #2343269) | Cod sursa (job #563436) | Cod sursa (job #2168193) | Cod sursa (job #1014102)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int MAX_N=10100;
vector<int> A[MAX_N];
int l[MAX_N];
int r[MAX_N];
int viz[MAX_N];
int cup(int nod) {
if(viz[nod]) {
return 0;
}
viz[nod]=1;
for(vector<int>::iterator it=A[nod].begin(); it!=A[nod].end(); it++) {
if(!r[*it]) {
l[nod]=*it;
r[*it]=nod;
return 1;
}
}
for(vector<int>::iterator it=A[nod].begin(); it!=A[nod].end(); it++) {
if(cup(r[*it])) {
l[nod]=*it;
r[*it]=nod;
return 1;
}
}
return 0;
}
int main() {
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n,m,e;
scanf("%d%d%d",&n,&m,&e);
for(int i=1;i<=e;i++) {
int a,b;
scanf("%d%d",&a,&b);
A[a].push_back(b);
}
bool change=true;
while(change) {
change=false;
memset(viz,0,sizeof(viz));
for(int i=1;i<=n;i++) {
if(!l[i]) {
if(cup(i)) {
change=true;
}
}
}
}
int sz=0;
for(int i=1;i<=n;i++) {
if(l[i]) {
sz++;
}
}
printf("%d\n",sz);
for(int i=1;i<=n;i++) {
if(l[i]) {
printf("%d %d\n",i,l[i]);
}
}
return 0;
}