Pagini recente » Cod sursa (job #2602278) | Borderou de evaluare (job #706502) | Cod sursa (job #2658317) | Cod sursa (job #679248) | Cod sursa (job #3004692)
#include <fstream>
#include <vector>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m;
int grad[100001];
stack <int> S;
vector <int> lista[100001];
struct muchie{
int x,y;
bool used;
}M[500001];
void euler()
{
while(!S.empty())
{
int nod=S.top();
if(grad[nod]==0)
{
g<<nod<<" ";
S.pop();
}
else
{
auto it=lista[nod].back();
if(M[it].used==false)
{
grad[M[it].x]--;
grad[M[it].y]--;
M[it].used=true;
S.push(M[it].x+M[it].y-nod);
}
lista[nod].pop_back();
}
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
f>>x>>y;
grad[x]++;
grad[y]++;
lista[x].push_back(i);
lista[y].push_back(i);
M[i].x=x;
M[i].y=y;
M[i].used=false;
}
S.push(1);
int s=0;
for(int i=1;i<=n;i++)
{
if(grad[i]%2==1)
s=1;
}
if(s==1)
g<<-1;
else
euler();
return 0;
}