Pagini recente » Cod sursa (job #2181225) | Cod sursa (job #188325) | Cod sursa (job #1740721) | Cod sursa (job #1394853) | Cod sursa (job #1735263)
//var I 100p (citirea cu scan) iterativ cu stiva expl.
#include<cstdio>
#include<vector>
#include<deque>
using namespace std;
int n,m,x,y,i,j,nod,muchieij;
int gr[100003];
bool viz[500003];
vector<int>a[100003];
vector<int>muc[100001];
deque<int>st;
int main()
{ freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
muc[x].push_back(i);
muc[y].push_back(i);
gr[x]++;
gr[y]++;
}
for(i=1;i<=n;i++)
if(gr[i]%2==1)
{printf("-1"); return 0; }
st.push_back(1);
while(!st.empty())
{
i=st.back();
if(gr[i]==0)
{ printf("%d ",i); st.pop_back(); }
else
{
j=a[i].back();
muchieij=muc[i].back();
a[i].pop_back();
muc[i].pop_back();
if(viz[muchieij]==0)
{
viz[muchieij]=1;
st.push_back(j);
gr[i]--;
gr[j]--;
}
}
}
return 0;
}
////var I 80p (citirea!) iterativ cu stiva expl.
//#include<fstream>
//#include<vector>
//#include<deque>
//using namespace std;
//ifstream fi("ciclueuler.in");
//ofstream fo("ciclueuler.out");
//int n,m,x,y,i,j,nod,muchieij;
//int gr[100003];
//bool viz[500003];
//vector<int>a[100003];
//vector<int>muc[100001];
//deque<int>st;
//int main()
//{
// fi>>n>>m;
// for(i=1;i<=m;i++)
// {
// fi>>x>>y;
// a[x].push_back(y);
// a[y].push_back(x);
// muc[x].push_back(i);
// muc[y].push_back(i);
// gr[x]++;
// gr[y]++;
// }
// for(i=1;i<=n;i++)
// if(gr[i]%2==1)
// { fo<<"-1"; return 0; }
// st.push_back(1);
// while(!st.empty())
// {
// i=st.back();
// if(gr[i]==0)
// { fo<<i<<" "; st.pop_back(); }
// else
// {
// j=a[i].back();
// muchieij=muc[i].back();
// a[i].pop_back();
// muc[i].pop_back();
// if(viz[muchieij]==0)
// {
// viz[muchieij]=1;
// st.push_back(j);
// gr[i]--;
// gr[j]--;
// }
// }
// }
// return 0;
//}
//var II
////100p (dar fara inline face 70p cred ca creapa stiva?)
//#include <fstream>
//#include <bitset>
//#include <vector>
//#define MAX 100003
//using namespace std;
//ifstream fi("ciclueuler.in");
//ofstream fo("ciclueuler.out");
//
//int n,m,x,y;
//bitset < 5*MAX > viz; //pentru stergerea muchiilor vizitate
//struct muchie {int x,y;} E[5*MAX];//memorarea muchiilor
//vector < int > G[MAX],ciclu;
//
//int VerifEulerian(){
// for(int i=1;i<=n;i++)
// if(G[i].size()%2==1)return 0;
// return 1;
//}
//inline void DF(int nod){ //fara inline la 3 teste crapa stiva?
// for(int i=0;i<G[nod].size();i++)
// if(!viz[G[nod][i]])
// {
// viz[G[nod][i]]=1;
// DF(E[G[nod][i]].x+E[G[nod][i]].y-nod);//(x+y)-x==y
// }
// ciclu.push_back(nod);
//}
//
//int main()
//{
// fi>>n>>m;
// for(int i=1;i<=m;i++)
// {
// fi>>x>>y;
// G[x].push_back(i); G[y].push_back(i);//memorez indicele muchiei
// E[i].x=x,E[i].y=y; //memorez muchia cu indicele i
// }
// if(VerifEulerian())
// {
// DF(1);
// for(int i=0;i<ciclu.size();i++)fo<<ciclu[i]<<' ';
// fo<<'\n';
// }
// else fo<<-1<<'\n';
// return 0;
//}