Pagini recente » Cod sursa (job #1359127) | Cod sursa (job #1872436) | Cod sursa (job #233377) | Cod sursa (job #556859) | Cod sursa (job #2870709)
#include <bits/stdc++.h>
using namespace std;
const int NMAX= 10005;
int lt[NMAX] , rt[NMAX] , viz[NMAX];
vector< int > v[NMAX];
int n , m , nmax;
bool fix(int nod)
{
if(viz[nod] == true )return false;
viz[nod] = true;
for(auto point : v[nod])
if(rt[point] == 0)
{
lt[nod] = point;
rt[point] = nod;
return true;
}
for(auto point : v[nod])
if(fix(rt[point]))
{
lt[nod] = point ;
rt[point] = nod;
return true;
}
return false;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n , m , e;
scanf("%d%d%d",&n,&m,&e);
int a , b , i ,j;
for(i = 1 ; i <= e ; i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b );
}
int ok = 1;
while(ok)
{
ok=0;
memset(viz,0,sizeof(viz));
for (i = 1 ; i <= n ; ++ i)
if(!lt[i]){fix( i );if(lt[i])ok=1;}
}
int cnt = 0 ;
for(i = 1; i <= n; ++ i)
cnt += (lt[i] > 0);
cout<<cnt<<endl;
for( i = 1 ; i<=n ;++i)
{
if(lt[i])printf("%d %d\n",i,lt[i]);
}
}