Cod sursa(job #657692)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 7 ianuarie 2012 03:17:26
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
 # include <fstream>
 # include <vector>
 
 # define dim 500005
 # define pb push_back
 
 using namespace std;
 
 ifstream f("ciclueuler.in");
 ofstream g("ciclueuler.out");
 
 vector < int > a[ dim ];
 int x[ dim ], y[ dim ], mc[ dim ], sol[ dim ];
 int ok = 1;
 int n, m;
 
 void euler( int nod )
 {
	 vector < int > :: iterator it;
	 
	 for ( it = a[ nod ].begin() ; it != a[ nod ].end() ; ++it )
		 if ( mc[ *it ] == 0 )
		 {
			 mc[ *it ] = 1;
			 euler( x[ *it ] + y[ *it ] - nod );
		 }
		 g << nod << " ";
 }
 
 void citire()
 {
	 int i;
	 
	 f >> n >> m;
	 for ( i = 1 ; i <= m ; i++ )
	 {
		 f >> x[ i ] >> y[ i ];
		 a[ x[ i ] ].pb( i );
		 a[ y[ i ] ].pb( i );
	 }
	 
 }
 
 void afisare()
 {
	 int i, j;
	 for ( i = 1 ; i <= n ; i++ )
	 {
		 for ( j = 0 ; j < a[ i ].size() ; j++ )
			 g << a[ i ][ j ] << " ";
		 g << "\n";
	 }
 }
 
 void rezolva()
 {
	 int i;
	 for ( i = 1 ; i <= n && ok ; i++ )
		 if ( a[ i ].size() % 2 == 1 )
			 ok = 0;
		 
		 if ( ok == 0 )
			 g << -1 ;
		 else
		 {
			 euler( 1 );
		 }
 }
 
 int main()
 {
	 citire();
	 rezolva();
	// afisare();
	 return 0;
 }