Cod sursa(job #656868)

Utilizator informatician28Andrei Dinu informatician28 Data 5 ianuarie 2012 13:59:50
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream> 
#include<vector> 
#include<stack> 

using namespace std; 

ifstream in("ciclueuler.in"); 
ofstream out("ciclueuler.out"); 
#define pb push_back
int N,M; 

vector<int> G[ 100001 ], sol; 
stack<int> S; 


int main() 
{
	int i,x,y; 
	in >> N >> M; 
	
	for(i = 1; i <= M; i++) 
	{
		in >> x >> y; 
		G[x].pb(y); 
		G[y].pb(x); 
	}
	
	for(i = 1; i <= N; i++) 
		if(G[i].size() & 1) 
			out << " -1"; 
		
		for(S.push(1); !S.empty(); ) 
		{
			int x = S.top(); 
			
			if(G[x].size() == 0) 
			{
				sol.pb(x); S.pop(); 
			
				continue; 
			}
			int y = G[x].back(); 
			
			G[x].pop_back(); 
			 S.push(y); 
			 
			 for(vector <int> :: iterator it = G[y].begin(); it != G[y].end(); ++it )
				 if(*it == x) 
				 {
					 G[y].erase( it ); 
					 break; 
				 }
		}
		
		for(vector <int> :: iterator it = sol.begin(); it != sol.end()-1; ++it) 
        out << (*it) << " "; 
				
}