Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 193 si 223 | Cod sursa (job #3293374) | Cod sursa (job #3289570) | Cod sursa (job #378879) | Cod sursa (job #3293352)
#include <iostream>
#include <bits/stdc++.h>
#define VMAX 100005
#define INF 100000000
#define int long long int
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
bool scos[5*VMAX]; // cate legaturi sunt
vector<pair<int,int>> graf[VMAX];
vector<int> parcurs;
int conexiuni_insisi[VMAX];
void dfs(int nod)
{
int i;
pair<int,int> k;
for(i=graf[nod].size()-1;i>=0;i=min(i-1,(int)graf[nod].size()-1))
{
k = graf[nod][i];
if(scos[graf[nod][i].second])
graf[nod].pop_back();
else
{
scos[graf[nod][i].second]=1;
graf[nod].pop_back();
dfs(k.first);
}
}
parcurs.push_back(nod);
}
void idkfs(int nod)
{
int i;
pair<int,int> k;
vector<int> q;
while(q.size())
{
nod = q.front();
for(i=graf[nod].size()-1;i>=0;i=min(i-1,(int)graf[nod].size()-1))
{
k = graf[nod][i];
if(scos[graf[nod][i].second])
graf[nod].pop_back();
else
{
scos[graf[nod][i].second]=1;
graf[nod].pop_back();
q.push_back(graf[nod][i].first);
break;
}
}
parcurs.push_back(q.back());
q.pop_back();
}
}
signed main()
{
int n,m,i,j,k,t,q,nr,p,suma,maxim,aparitii,candidat,st,dr,mij,i_max,j_max;
fin>>n>>m;
for(i=0;i<m;i++)
{
fin>>j>>k;
if(j==k)
{
conexiuni_insisi[j]++;
continue;
}
graf[j].push_back({k,i});
graf[k].push_back({j,i});
}
for(i=1;i<=n;i++)
if(graf[i].size()%2)
break;
if(i<=n)
{
fout<<"-1\n";
return 0;
}
dfs(1);
for(i=1;i<=n;i++)
if(graf[i].size())
break;
if(i<=n)
{
fout<<"-1\n";
return 0;
}
while(!parcurs.empty())
{
fout<<parcurs.back()<<' ';
while(conexiuni_insisi[parcurs.back()])
{
conexiuni_insisi[parcurs.back()]--;
fout<<parcurs.back()<<' ';
}
parcurs.pop_back();
}
fout<<'\n';
return 0;
}