Pagini recente » Cod sursa (job #3223168) | Cod sursa (job #1885911) | Cod sursa (job #1308452) | Cod sursa (job #1407733) | Cod sursa (job #626410)
Cod sursa(job #626410)
# 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, j;
f >> n >> m >> cnt_edges;
for ( i = 1 ; i <= cnt_edges ; i++ )
{
int x, y;
f >> x >> y;
G[ x ].push_back( y );
}
/*for ( i = 1 ; i <= n ; i++ )
{
for ( j = 0 ; j < G[ i ].size() ; j++ )
g << G[ i ][ j ] << " ";
g << "\n";
}*/
change = 1;
while( change )
{
change = 0;
for ( j = 1 ; j <= n ; j++ )
u[ j ] = 0;
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;
}