Pagini recente » Cod sursa (job #1554487) | Cod sursa (job #2220935) | Cod sursa (job #2487120) | Cod sursa (job #2370079) | Cod sursa (job #2402979)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
//------------------------------------------
//Variabile globale
int n,m;
vector<vector<pair<int,int>>>v;
queue<int>sol;
//------------------------------------------
//Functii
void citire();
bool verificare(),verificare2();
void ciclu();
void afisare();
//------------------------------------------
int main()
{
citire();
if(!verificare() or !verificare2())
{
g << -1;
return 0;
}
ciclu();
afisare();
return 0;
}
//------------------------------------------
void citire()
{
f >> n >> m;
v.resize(n + 1);
for(int i = 1; i <= n; ++i)
v[i].push_back({0,0});
int x,y;
for(int i = 1; i <= m; ++i)
{
f >> x >> y;
v[x].push_back({y,i});
v[y].push_back({x,i});
}
}
//------------------------------------------
bool verificare()
{
for(int i = 1; i <= n; ++i)
{
v[i][0].first = v[i].size() - 1;
if(v[i].size() & 1 == 0 or v[i].size() == 1)
return false;
}
return true;
}
//------------------------------------------
void ciclu()
{
int st[500001],nr = 1;
st[nr]=1;
bool ap[500001];
while(nr)
{
int i = v[st[nr]][0].first;
while(i > 0 && ap[v[st[nr]][i].second])
i--;
v[st[nr]][0].first = i - 1;
if(i > 0)
{
nr++;
st[nr] = v[st[nr - 1]][i].first;
ap[v[st[nr - 1]][i].second] = 1;
}
else
{
sol.push(st[nr]);
nr--;
}
}
}
//------------------------------------------
void afisare()
{
while(!sol.empty() && sol.size() != 1)
{
g << sol.front() << " ";
sol.pop();
}
}
//------------------------------------------
bool verificare2()
{
queue<int>q;
bool ap[100001];
for(int i = 1;i <= n;++i)
ap[i]=0;
q.push(1);
ap[1]=1;
while(!q.empty())
{
int x = q.front();
q.pop();
for(int i = 1; i < v[x].size(); ++i)
if(ap[v[x][i].first] == 0)
{
ap[v[x][i].first] = 1;
q.push(v[x][i].first);
}
}
for(int i = 1;i <= n;++i)
if(ap[i]!=1)
return false;
return true;
}