Pagini recente » Cod sursa (job #1969394) | Cod sursa (job #1142660) | Borderou de evaluare (job #2013921) | Cod sursa (job #2582673) | Cod sursa (job #3004663)
#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()
{
if(!S.empty())
{
int nod=S.top();
if(grad[nod]==0)
{
g<<nod<<" ";
S.pop();
}
else
{
for(auto it:lista[nod])
{
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);
euler();
}
}
euler();
}
}
}
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;
}