Pagini recente » Cod sursa (job #2917443) | Cod sursa (job #2120493) | Cod sursa (job #1222297) | Cod sursa (job #2700095) | Cod sursa (job #610759)
Cod sursa(job #610759)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
const int N=100005;
vector<int> a[N];
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
inline int abs(int a)
{
return a>0 ? a : -a;
}
void pop(vector<int>& v,int x)
{
int i=0,step=1<<18;
for (i=-1;step;step>>=1)
if (i+step<v.size() && abs(v[i+step])<x)
i+=step;
i++;
v[i]*=-1;
}
void euler(int x)
{
vector<int>::iterator i;
while (a[x].size())
{
for (i=a[x].end()-1;i!=a[x].begin() && *i<0;i--);
if (*i<0)
return;
out<<x<<" ";
pop(a[*i],x);
int q=*i;
a[x].erase(i,a[x].end());
x=q;
}
}
int main()
{
int m,n,x,y;
in>>n>>m;
while (m--)
{
in>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
for (int i=1;i<=n;i++)
sort(a[x].begin(),a[x].end());
euler(1);
out<<"\n";
return 0;
}