Pagini recente » Cod sursa (job #2308349) | Cod sursa (job #2871433) | Cod sursa (job #2591420) | Cod sursa (job #2422826) | Cod sursa (job #1482701)
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<bitset>
#include<cstring>
#include<queue>
#include<stack>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define FOR(a,b,c) for (int a=b;a<=c; ++a)
#define ROF(a,b,c) for (int a=b;a>=c; --a)
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int N,M,nrimp,nod,nrnod;
int deg[100010];
stack<int> s;
stack<int> rez;
struct elem {
int val;
elem* next=NULL;
};
elem *lista[100010];
void add(elem*,int);
void del(elem*,int);
bool empt(elem*);
void euler();
int main()
{
f>>N>>M;
FOR (i,1,N) {
elem *p=new elem;
p->next=lista[i];
lista[i]=p;
elem *p2=new elem;
lista[i]->next=p2;
}
FOR (i,1,M) {
int x,y;
f>>x>>y;
add(lista[x],y);
add(lista[y],x);
++deg[x];
++deg[y];
}
/*
del(lista[2],2);
del(lista[2],2);
lista[2]=lista[2]->next;
while (lista[2]->next!=NULL) {
cout<<lista[2]->val<<' ';
lista[2]=lista[2]->next;
}
cout<<'\n'<<empt(lista[3]);
*/
FOR (i,1,N) {
if (deg[i]%2==1) {
++nrimp;
nod=i;
}
}
if (nrimp==0 || nrimp==2) {
if (!nrimp) {
s.push(1);
}
else {
s.push(nod);
}
//cout<<"WTF";
euler();
if (nrnod<=N) {
g<<(-1);
}
else {
while (!rez.empty()) {
g<<rez.top()<<' ';
rez.pop();
}
}
//cout<<"WTF";
}
else {
g<<(-1);
}
f.close();g.close();
return 0;
}
void add(elem* lista,int val) {
elem* p=lista;
while (lista->next!=NULL) {
p=lista;
lista=lista->next;
}
elem* da=new elem;
da->val=val;
da->next=lista;
p->next=da;
}
void del(elem* lista,int val) {
elem* p=lista;
lista=lista->next;
while (lista->val!=val) {
p=lista;
lista=lista->next;
}
p->next=lista->next;
delete lista;
}
bool empt(elem* li) {
if ((li->next)->next==NULL) {
return true;
}
return false;
}
void euler() {
while (!s.empty()) {
int nod=s.top();
++nrnod;
if (!empt(lista[nod])) {
int fiu=(lista[nod]->next)->val;
s.push(fiu);
del(lista[nod],fiu);
del(lista[fiu],nod);
}
else {
rez.push(nod);
//g<<nod<<' ';
s.pop();
}
}
}