Pagini recente » Cod sursa (job #2511023) | Cod sursa (job #980556) | Cod sursa (job #2346903) | Cod sursa (job #2383915) | Cod sursa (job #773581)
Cod sursa(job #773581)
# include <fstream>
# include <cstring>
# include <algorithm>
# include <vector>
# include <stack>
# define pb push_back
# define dim 500005
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct euler
{
int nod, poz;
};
stack < euler > q;
vector < euler > a[ dim ];
bool viz[ dim ];
int n, m;
void citire()
{
int i, j, x, y;
f >> n >> m;
for ( i = 1 ; i <= m ; i++ )
{
f >> x >> y;
a[ x ].pb( ( euler ) { y, i } );
a[ y ].pb( ( euler ) { x, i } );
}
/*
for ( i = 1 ; i <= n ; i++ )
{
for ( j = 0 ; j < a[ i ].size(); j++ )
g << a[ i ][ j ].nod << " ";
g << "\n";
}
g << "\n";
for ( i = 1 ; i <= n ; i++ )
{
for ( j = 0 ; j < a[ i ].size(); j++ )
g << a[ i ][ j ].poz << " ";
g << "\n";
}
g << "\n";
*/
}
inline void df( int x )
{
int i ;
euler var;
q.push( ( euler ) { x, 0 } );
while( !q.empty() )
{
var = q.top();
//g << var.nod << " " << var.poz << "\n";
for ( i = var.poz ; i < a[ var.nod ].size() ; i++ )
if ( viz[ a[ var.nod ][ i ].poz ] == 0 )
{
viz[ a[ var.nod ][ i ].poz ] = 1;
q.pop();
q.push( ( euler ) { var.nod , i } );
q.push( ( euler ) { a[ var.nod ][ i ].nod, 0 } );
break;
}
if ( i == a[ var.nod ].size() )
{
var = q.top();
g << var.nod << " ";
q.pop();
}
}
/*
for ( i = 0 ; i < a[ x ].size() ; i++ )
if ( viz[ a[ x ][ i ].poz ] == 0 )
{
viz[ a[ x ][ i ].poz ] = 1;
df( a[ x ][ i ].nod );
}
g << x << " ";
*/
}
int main()
{
int i;
citire();
for ( i = 1 ; i <= n ; i++ )
if( a[ i ].size() % 2 != 0 )
{
g << "-1";
return 0;
}
df( 1 );
return 0;
}