Pagini recente » Rating catalin gabriel (catagabriel) | Profil AndreeaBajenaru | Istoria paginii utilizator/mihainastasie | Istoria paginii utilizator/barca_for_life | Cod sursa (job #2074556)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#define DN 100001
#define DM 500001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> v[DN];
stack <int> r;
struct vizitat{
bool vz;
int st;
int dr;} viz[DM];
void dfs(int i)
{
while(v[i].size())
{
int a=v[i].back();
if(viz[a].vz==0)
{
viz[a].vz=1;
v[i].pop_back();
if(i==viz[a].st)
dfs(viz[a].dr);
else dfs(viz[a].st);
}
else v[i].pop_back();
}
r.push(i);
}
int main()
{
int n,m,a,b;
bool ok=1;
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>a>>b;
v[a].push_back(i);
v[b].push_back(i);
viz[i].st=a;
viz[i].dr=b;
}
for(int i=1;i<=n;i++)
if(v[i].size()%2==1)
{
ok=0;
break;
}
if(ok==1)
{
int e_conex=1;
dfs(1);
for(int i=1;i<=n;i++)
if(v[i].size())
{
e_conex=0;
break;
}
if(e_conex==1)
while(!r.empty())
{
g<<r.top()<<" ";
r.pop();
}
else g<<-1;
}
else g<<-1;
return 0;
}