Pagini recente » Cod sursa (job #1117664) | Cod sursa (job #346508) | Cod sursa (job #1145946) | Cod sursa (job #168879) | Cod sursa (job #930883)
Cod sursa(job #930883)
#include<cstdio>
#include<vector>
using namespace std;
#define MAX 10001
#define pb push_back
int N , M ,E , l[MAX] , r[MAX] , pairs , ind , viz[MAX];
bool sw;
vector<int> G[MAX] ;
void citire();
void solve();
void tipar();
bool cuplaj(int nod);
int main()
{
citire();
solve();
tipar();
return 0;
}
void citire()
{
int x , y ;
freopen("cuplaj.in" , "r" , stdin );
scanf("%d%d%d" , &N , &M , &E);
for(int i = 1 ; i <= E ; ++i )
{
scanf("%d%d" , &x , &y);
G[x].pb(y);
}
}
void solve()
{
for(sw = 1,ind=1;sw;ind++)
{
sw = 0;
for(int i = 1 ; i <= N ; ++i )
if(!l[i])if(cuplaj(i)){sw = 1;pairs++;}
}
}
void tipar()
{
freopen("cuplaj.out" , "w" , stdout );
printf("%d\n" , pairs);
for(int i = 1 ; i <= N ; ++i )
if(l[i])printf("%d %d\n" , i , l[i]);
}
bool cuplaj(int nod)
{
if(viz[nod]==ind)return 0;
viz[nod] = ind;
for(int j = 0 ; j < (int)G[nod].size() ; ++j )
if(!r[G[nod][j]] || cuplaj(r[G[nod][j]]) )
{
l[nod] = G[nod][j];
r[G[nod][j]] = nod;
return 1;
}
return 0;
}