Pagini recente » Cod sursa (job #3180959) | Cod sursa (job #585208) | Cod sursa (job #704242) | Cod sursa (job #290210) | Cod sursa (job #2345684)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#include <algorithm>
#define NMAX 100005
#define MMAX 500005
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
int N, M;
vector<pair<int, int>> graph[NMAX];
stack<int> s;
stack<int> rez;
bool availble[MMAX];
int grad[NMAX];
int visited[NMAX];
int main()
{
fi >> N >> M;
int a, b;
int cod = 0;
for(int i = 1; i <= M; ++i)
{
fi >> a >> b;
++cod;
graph[a].push_back({b, cod});
graph[b].push_back({a, cod});
availble[cod] = 1;
grad[a] ++;
grad[b] ++;
}
for(int i = 1; i <= N; ++i)
if(grad[i] % 2 == 1)
{
fo <<-1;
return 0;
}
s.push(1);
while(!s.empty())
{
int current = s.top();
bool canAdvance = false;
for(auto& y:graph[current])
{
if(availble[y.second])
{
availble[y.second] = 0;
s.push(y.first);
canAdvance = true;
break;
}
}
if(!canAdvance)
{
rez.push(current);
s.pop();
}
}
for(int i = 1; i <= M; ++i)
{
fo << rez.top() << " ";
rez.pop();
}
}