Pagini recente » Cod sursa (job #634427) | Cod sursa (job #1420997) | Cod sursa (job #3269312) | Cod sursa (job #1740332) | Cod sursa (job #1414406)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
#include<set>
#include<map>
#include<cmath>
#include<climits>
using namespace std ;
#define maxn 10005
int N, M, E, nr ;
vector<int> graf[maxn] ;
bool sel[maxn] ;
int cuplaj[maxn], st[maxn] ;
bool dfs(int nod)
{
if( sel[nod] == true )
return false ;
sel[nod] = true ;
for(size_t i = 0; i < graf[nod].size(); ++i)
{
int vecin = graf[nod][i] ;
int de_unde = st[vecin] ;
if( de_unde == 0 || dfs(de_unde) == true )
{
cuplaj[nod] = vecin ;
st[vecin] = nod ;
return true ;
}
}
return false ;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d%d%d", &N, &M, &E);
for(int i = 1; i <= E; ++i)
{
int x, y ;
scanf("%d%d", &x, &y);
graf[x].push_back(y) ;
}
bool cuplat = false ;
while( cuplat == false )
{
cuplat = true ;
memset( sel, 0, sizeof(sel) ) ;
for(int i = 1; i <= N; ++i)
{
if( cuplaj[i] == 0 && dfs(i) == true )
{
++nr ;
cuplat = false ;
}
}
}
printf("%d\n", nr);
for(int i = 1; i <= N; ++i)
if( cuplaj[i] > 0 )
printf("%d %d\n", i, cuplaj[i]);
return 0 ;
}