Pagini recente » Cod sursa (job #918643) | Cod sursa (job #3040119) | Cod sursa (job #361260) | Cod sursa (job #337074) | Cod sursa (job #1922925)
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
ifstream fin( "cuplaj.in" );
ofstream fout( "cuplaj.out" );
int A[10010],B[10010],i,j,n,m,x,y,ans,q;
char fv[10010];
vector< int > G[ 10010 ];
bool cuplaj( int nod )
{
if( fv[ nod / 8 ] & ( 1 << ( nod % 8 ) ) )
return false;
fv[ nod / 8 ] += 1 << ( nod % 8 );
for( int i = 0 ; i < G[ nod ].size() ; i++ )
{
if( !B[ G[ nod ][ i ] ] )
{
A[ nod ] = G[ nod ][ i ];
B[ G[ nod ][ i ] ] = nod;
return true;
}
}
for( int i = 0 ; i < G[ nod ].size() ; i++ )
{
if( cuplaj( B[ G[ nod ][ i ] ] ) )
{
B[ G[ nod ][ i ] ] = nod;
A[ nod ] = G[ nod ][ i ];
return true;
}
}
return false;
}
int main()
{
fin>>n>>m>>q;
for( i = 1 ; i <= q ; i++ )
{
fin>>x>>y;
G[ x ].push_back( y );
}
for( i = 1 ; i <= n ; i++ )
{
if( !A[ i ] )
{
for( j = 0 ; j <= n / 8 + 5 ; j++ )
fv[ j ] = 0;
if( cuplaj( i ) )
{
++ans;
}
}
}
fout<<ans<<'\n';
for( i = 1 ; i <= n ; i++ )
if( A[ i ] )
fout<<i<<' '<<A[ i ]<<'\n';
return 0;
}