Pagini recente » Cod sursa (job #1854818) | Cod sursa (job #1855459) | Cod sursa (job #2209096) | Cod sursa (job #247153) | Cod sursa (job #661545)
Cod sursa(job #661545)
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
#define pb push_back
int n,m;
vector<int> vec[100001];
vector<int> vec1[100001];
vector<int> pr[100001];
int sol[500001];
int nrmuchii;
int ct=0;
bool viz[100001];
void prio(int nod,int tata,int care){
viz[nod]=true;
int i;
int contor=0;
for(i=0;i<vec1[nod].size();i++){
if(vec1[nod][i]!=-1){
if(vec1[nod][i]==tata){
contor++;
if(contor>=2){
pr[tata][care]=1;
pr[nod][i]=1;
vec1[nod][i]=-1;
vec1[tata][care]=-1;
tata=-1;
}
}
else{
if(viz[vec[nod][i]]!=true)
prio(vec1[nod][i],nod,i);
}
}
}
}
void euler(int nod,int tata){
if(nrmuchii<=0){}
else{
ct++;
sol[ct]=nod;
int i;
for(i=0;i<vec[nod].size();i++){
if(pr[nod][i]==1)
if(vec[nod][i]!=-1){
if(vec[nod][i]==tata){
vec[nod][i]=-1;
tata=-1;
}
else{
nrmuchii--;
int aux=vec[nod][i];
vec[nod][i]=-1;
euler(aux,nod);
}
}
}
for(i=0;i<vec[nod].size();i++){
if(pr[nod][i]==0)
if(vec[nod][i]!=-1){
if(vec[nod][i]==tata){
vec[nod][i]=-1;
tata=-1;
}
else{
nrmuchii--;
int aux=vec[nod][i];
vec[nod][i]=-1;
euler(aux,nod);
}
}
}
}
}
int main(){
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
f>>n>>m;
int i,j;
for(i=1;i<=m;i++){
int a,b;
f>>a>>b;
vec[a].pb(b);
vec[b].pb(a);
vec1[a].pb(b);
vec1[b].pb(a);
pr[a].pb(0);
pr[b].pb(0);
}
g<<"1";
return 0;
prio(1,-1,-1);
nrmuchii=m;
euler(1,-1);
if(nrmuchii>0){
g<<"-1";
}
else{
for(i=1;i<=ct;i++){
g<<sol[i]<<" ";
}
}
return 0;
}