Pagini recente » Cod sursa (job #2144245) | Cod sursa (job #1961235) | Cod sursa (job #2207587) | Cod sursa (job #2047143) | Cod sursa (job #2874847)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> v[100011],back_edge[100011],to_edge[100011];
bool fost[100011];
void dfs(int k)
{
fost[k]=1;
while(v[k].empty()==false)
{
auto it=v[k].begin();
int p=*it;
v[k].erase(it);
auto it1=find(v[p].begin(),v[p].end(),k);
v[p].erase(it1);
if(fost[p]==1)
{
back_edge[k].push_back(p);
back_edge[p].push_back(k);
}
else
{
to_edge[k].push_back(p);
to_edge[p].push_back(k);
dfs(p);
}
}
}
vector <int> sol;
int n,m,i,nod,stop,tata,muc,x,y,j,mult[100011];
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(i=1;i<=n;i++)
if(v[i].size()%2==1)
{
g<<-1;
return 0;
}
dfs(1);
nod=stop=1;
tata=muc=0;
while(stop)
{
sol.push_back(nod);
stop=0;
if(muc==0)
{
auto it=find(back_edge[nod].begin(),back_edge[nod].end(),tata);
if(it!=back_edge[nod].end())
back_edge[nod].erase(it);
}
else
{
auto it=find(to_edge[nod].begin(),to_edge[nod].end(),tata);
if(it!=to_edge[nod].end())
to_edge[nod].erase(it);
}
if(back_edge[nod].size()>0)
{
tata=nod;
nod=back_edge[nod].back();
back_edge[tata].pop_back();
muc=0;
stop=1;
}
else
if(to_edge[nod].size()>0)
{
tata=nod;
nod=to_edge[nod].back();
to_edge[tata].pop_back();
muc=1;
stop=1;
}
}
for(auto it=sol.begin();it!=sol.end();it++)
for(i=0;i<=mult[*it];i++)
g<<*it<<" ";
return 0;
}