Pagini recente » Cod sursa (job #1386720) | Cod sursa (job #3288468) | Diferente pentru implica-te/arhiva-educationala intre reviziile 16 si 223 | Cod sursa (job #382066) | Cod sursa (job #2684930)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in"); ofstream g("ciclueuler.out");
int n,m,gr[100005],vizm[500005],vizn[100005];
vector <pair <int, int> > L[100005];
stack <int> S;
vector <int> C;
void dfs(int nod)
{ vizn[nod]=true;
for(unsigned int i=0;i<L[nod].size();++i)
if(!vizn[L[nod][i].first]) dfs(L[nod][i].first);
}
int main()
{ f>>n>>m;
for(int a,b,i=1;i<=m;++i)
{ f>>a>>b;
L[a].push_back(make_pair(b,i)); gr[a]++;
L[b].push_back(make_pair(a,i)); gr[b]++;
}
dfs(1);
for(int i=1;i<=n;++i)
if(!vizn[i]) {g<<-1; g.close(); f.close();return 0;}
for(int i=1;i<=n;++i)
if(gr[i]%2) {g<<-1; g.close(); f.close(); return 0;}
S.push(1);
while(!S.empty())
{ int nod=S.top();
if(!gr[nod]) {C.push_back(nod); S.pop();}
else
{ /// din capat, scot tot ce a fost vizitat deja pentru a ajugne la un nod bun
while(vizm[L[nod].back().second]) L[nod].pop_back();
int nod1=L[nod].back().first; ///nod bun
gr[nod]--;
gr[nod1]--;
vizm[L[nod].back().second]=true;
L[nod].pop_back();
S.push(nod1);
}
}
for(int i=C.size()-1;i;--i) g<<C[i]<<" ";
g.close(); f.close(); return 0;
}