Pagini recente » Cod sursa (job #3292170) | Cod sursa (job #1739800) | Cod sursa (job #2256815) | Cod sursa (job #895753) | Cod sursa (job #918443)
Cod sursa(job #918443)
# include <fstream>
# include <vector>
# define dim 100001
using namespace std;
vector < vector < int > > mat( dim );
vector< int > l( dim ), r( dim ), uz( dim );
int n,m,e;
inline void citire()
{
ifstream fin("cuplaj.in");
fin >> n >> m >> e;
for(int i=1; i<=e; ++i )
{
int x,y;
fin >> x >> y;
mat[ x ].push_back( y+n );
mat[ y+n ].push_back( x );
}
}
inline void initializare()
{
for(int i=1; i<=n; ++i )
uz[ i ] = 0;
}
inline int cupleaza( int x )
{
if( uz[ x ] == 1 )
return 0;
uz[ x ] = 1;
for(int i=0; i<mat[ x ].size(); ++i )
if( !r[ mat[ x ][ i ] ] )
{
l[ x ] = mat[ x ][ i ];
r[ mat[ x ][ i ] ] = x;
return 1;
}
for(int i=0; i<mat[ x ].size(); ++i )
if( cupleaza( r[ mat[ x ][ i ] ] ) )
{
l[ x ] = mat[ x ][ i ];
r[ mat[ x ][ i ] ] = x;
return 1;
}
return 0;
}
inline void afisare()
{
ofstream fout("cuplaj.out");
int nr=0;
for(int i=1; i<=n; ++i )
if( l[ i ] )
nr ++;
fout<<nr<<"\n";
for(int i=1; i<=n; ++i )
if( l[ i ] )
fout << i << " " << l[ i ]-n <<"\n";
}
int main()
{
citire();
int ok = 0;
while( ok==0 )
{
ok=1;
initializare();
for(int i=1; i<=n; ++i )
if( !l[ i ] && cupleaza( i ) )
ok = 0;
}
afisare();
}