Pagini recente » Istoria paginii autumn-warmup-2007/clasament/runda-2 | Cod sursa (job #2236637) | Cod sursa (job #2428343) | Cod sursa (job #3276768) | Cod sursa (job #3297466)
#include <fstream>
#include <vector>
const int MAXN = 1e5;
std::vector<int> adj[MAXN];
std::vector<int> sedge;
std::vector<bool> viz;
int begin[MAXN];
std::vector<int> cyc;
void euler( int u ) {
for( int &idx = begin[u]; idx < (int)adj[u].size(); idx++ ){
int edge = adj[u][idx];
if( viz[edge] ) continue;
viz[edge] = true;
euler( sedge[edge] - u );
}
cyc.push_back( u );
}
int main() {
std::ifstream fin( "ciclueuler.in" );
std::ofstream fout( "ciclueuler.out" );
int n, m;
fin >> n >> m;
for( int i = 0; i < m; i++ ){
int a, b;
fin >> a >> b;
a--;
b--;
sedge.push_back( a + b );
viz.push_back( false );
adj[a].push_back( i );
adj[b].push_back( i );
}
euler( 0 );
if( (int)cyc.size() != m + 1 ){
fout << "-1\n";
return 0;
}
cyc.pop_back();
for( int x : cyc ) fout << x + 1 << ' '; fout << '\n';
return 0;
}