Pagini recente » Cod sursa (job #1982853) | Cod sursa (job #885863) | Cod sursa (job #578938) | Cod sursa (job #336717) | Cod sursa (job #1510563)
#include <fstream>
#include <vector>
#include <algorithm>
#define N 100010
#define M 500010
#define vec X[it]+Y[it]-nod
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector<int> V[N];
int X[M], Y[M], n, m, i, k;
char F[M], viz[N];
void df(int);
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>X[i]>>Y[i];
V[X[i]].push_back(i);
V[Y[i]].push_back(i);
}
df(1);
for(i=1;i<=n;i++)
for(int L=0,R=V[i].size()-1;L<R;)
{
while(F[V[i][L]]==1&&L<R)L++;
while(F[V[i][R]]==0&&L<R)R--;
if(L<R){swap(V[i][L], V[i][R]); L++; R--; }
}
k = 2*m-1;
int nod = 1;
while(1)
{
while(V[nod].size()&&F[V[nod].back()]==2)
{
V[nod].pop_back();
k--;
}
if(!V[nod].size())break;
g<<nod<<' ';
i = V[nod].back();
F[i]=2;
V[nod].pop_back();k--;
nod = X[i]+Y[i]-nod;
}
return 0;
}
void df(int nod)
{
viz[nod] = 1;
for(auto it:V[nod])
if(!viz[vec])
{
F[it] = 1;
df(vec);
}
}