Pagini recente » Cod sursa (job #2797628) | Cod sursa (job #2749849) | Cod sursa (job #3283874) | Cod sursa (job #542616) | Cod sursa (job #1790165)
#include<cstdio>
#include<vector>
#include<bitset>
#define N 10000
using namespace std;
vector<int> muchii[N+1];
int right[N+1];
int left[N+1];
bitset<N+1> viz;
bool pairUp(int nod){
if (viz[nod]==true) return false;
viz.set(nod);
for(int i=0;i<muchii[nod].size();i++){
int now=muchii[nod][i];
if (left[now]==0 ||pairUp(left[now])==true){
left[now]=nod;
right[nod]=now;
return true;
}
}
return false;
}
int main(){
freopen ("cuplaj.in","r",stdin);
freopen ("cuplaj.out","w",stdout);
int n,m,e,i;
scanf ("%d%d%d",&n,&m,&e);
for(i=1;i<=e;i++){
int x,y;
scanf ("%d%d",&x,&y);
muchii[x].push_back(y);
}
bool fl=true;
while(fl==true){
fl=false;
viz.reset();
for(i=1;i<=n;i++)
if (right[i]==0 &&pairUp(i)==true) fl=true;
}
int cnt=0;
for(i=1;i<=n;i++)
cnt+=(right[i]!=0);
printf ("%d\n",cnt);
for(i=1;i<=n;i++)
if (right[i]!=0)
printf ("%d %d\n",i,right[i]);
return 0;
}