Pagini recente » Cod sursa (job #2608998) | Cod sursa (job #385858) | Cod sursa (job #1232454) | Cod sursa (job #1466389) | Cod sursa (job #626214)
Cod sursa(job #626214)
# include <fstream>
# include <vector>
# include <algorithm>
# include <cstring>
# define MAXN 10005
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector <int> G[ MAXN ];
int l[ MAXN ], r[ MAXN ], u[ MAXN ];
int pairup( const int n )
{
int i;
if ( u[ n ] )
return 0;
u[ n ] = 1;
for ( i = 0 ; i < G[ n ].size() ; i++ )
if ( r[ G[ n ][ i ] ] == 0 )
{
l[ n ] = G[ n ][ i ];
r[ G[ n ][ i ] ] = n;
return 1;
}
for ( i = 0 ; i < G[ n ].size() ; i++ )
if ( pairup( r[ G[ n ][ i ] ] ) == 1 )
{
l[ n ] = G[ n ][ i ];
r[ G[ n ][ i ] ] = n;
return 1;
}
return 0;
}
int main(void)
{
int n, m, cnt_edges, i, change;
f >> n >> m >> cnt_edges;
for ( i = 1 ; i <= cnt_edges ; i++ )
{
int x, y;
f >> x >> y;
G[ x ].push_back( y );
}
change = 1;
while( change )
{
change = 0;
memset( u, 0, sizeof( u ) );
for ( i = 1 ; i <= n ; i++ )
if ( !l[ i ] )
if ( pairup( i ) )
change = 1;
}
int cuplaj = 0;
for ( i = 1 ; i <= n ; i++ )
if ( l[ i ] > 0 )
cuplaj = cuplaj + 1;
g << cuplaj << "\n";
for ( i = 1 ; i <= n ; i++ )
if (l[ i ] > 0)
g << i << " " << l[ i ] <<"\n";
return 0;
}