Pagini recente » Cod sursa (job #2755329) | Cod sursa (job #2761154) | Cod sursa (job #2755278) | Cod sursa (job #718113) | Cod sursa (job #640259)
Cod sursa(job #640259)
#include<cstdio>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
int N,M,cnt,poz;
typedef pair <int,int> hh;
vector <hh> nr[100010];
char viz[100100],fol[500100];
queue <int> Q;
int S[100100],T;
unsigned int s[100100];
void df(){
int x;
viz[1]=true;
S[++T]=1;
while(T){
x=S[T];
while(s[x]<nr[x].size()){
if(viz[nr[x][s[x]].first])
++s[x];
else
break;
}
if(s[x]==nr[x].size()){
--cnt;
--T;
continue;
}
S[++T]=nr[x][s[x]].first;
viz[nr[x][s[x]].first]=true;
++s[x];
}
}
void eul(int x){
while(1){
while(s[x]<nr[x].size()){
if(fol[ nr[x][s[x]].second ])
++s[x];
else
break;
}
if(s[x]==nr[x].size())
return;
S[++T]=x;
x=nr[x][s[x]].first;
fol[ nr[x][s[x]].second ]=1;
++s[x];
}
}
void euler(){
int x=1;
T=0;
do{
eul(x);
x=S[T];
--T;
Q.push(x);
}while(T);
}
int main(){
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int i,x,y;
//scanf("%d%d",&N,&M);
f>>N>>M;
for(i=1;i<=M;++i){
//scanf("%d%d",&x,&y);
f>>x>>y;
nr[x].push_back( hh(y,i) );
nr[y].push_back( hh(x,i) );
}
for(i=1;i<=N;++i){
if(nr[i].size()%2){
g<<"-1\n";
f.close();
g.close();
return 0;
}
}
cnt=N;
df();
if(cnt){
g<<"-1\n";
f.close();
g.close();
return 0;
}
for(i=0;i<=N;++i)
S[i]=s[i]=0;
euler();
Q.pop();
for(;!Q.empty();Q.pop())
//printf("%d ",Q.front());
g<<Q.front()<<' ';
g<<'\n';
f.close();
g.close();
return 0;
}