Pagini recente » Cod sursa (job #1403014) | Cod sursa (job #2155903) | Cod sursa (job #1015665) | Cod sursa (job #44213) | Cod sursa (job #2171167)
#include <bits/stdc++.h>
std::ifstream in("ciclueuler.in");
std::ofstream out("ciclueuler.out");
using namespace std;
const int MAX = 500005;
bitset < MAX > beenThere;
vector < pair < int , int > > myVector[MAX];
stack < int > myStack;
vector < int > Answer;
int Grad[MAX];
int N,countt,M;
inline void scanDATA()
{
in >> N >> M;
int x,y;
for ( int i = 1; i <= M ; ++i)
{
in >> x >> y;
countt++;
myVector[x].push_back(make_pair(y,countt));
myVector[y].push_back(make_pair(x,countt));
Grad[x]++;
Grad[y]++;
}
}
inline void EULER()
{
myStack.push(1);
while(!myStack.empty())
{
int currentNode = myStack.top();
if(myVector[currentNode].size() > 0)
{
int nod = myVector[currentNode].back().first;
int edge = myVector[currentNode].back().second;
myVector[currentNode].pop_back();
if(beenThere[edge] == false)
{
beenThere[edge] = true;
myStack.push(nod);
}
}
else
{
myStack.pop();
Answer.push_back(currentNode);
}
}
out << Answer.size() <<"\n";
for ( auto x : Answer)
out << x <<" ";
}
int main()
{
scanDATA();
for ( int i = 1; i <= N ; ++i)
if(Grad[i] %2 !=0 || Grad[i] == 0)
{
out << -1;
return 0;
}
EULER();
}