Pagini recente » Cod sursa (job #878131) | Cod sursa (job #902065) | Cod sursa (job #98109) | Cod sursa (job #2633675) | Cod sursa (job #1802955)
#include <bits/stdc++.h>
#define nmax 500005
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int ah,n,m,x,y,k,ok,g[nmax],sol[nmax],X[nmax],Y[nmax],poz[nmax];
bool Liz1[nmax];
vector<int>L[nmax];
inline void DFS(int nod)
{//ah++;cout<<ah<<" ";
while(poz[nod]<L[nod].size())
{int qq=L[nod][poz[nod]];
if(Liz1[qq]!=1){Liz1[qq]=true;
DFS(X[qq]+Y[qq]-nod);
}
poz[nod]++;
}
sol[++k]=nod;
}
int main()
{int i1;
fin>>n>>m;
for(i1=1;i1<=m;i1++)
{fin>>x>>y;
//cout<<x<<" "<<y<<"\n";
g[x]++;
g[y]++;
L[x].push_back(i1);
L[y].push_back(i1);
X[i1]=x;
Y[i1]=y;
}
for(i1=1;i1<=n;i1++)
if(g[i1]%2==1)ok=1;
if(ok==1)fout<<"-1\n";
else{
DFS(1);
for(i1=1;i1<=m;i1++)
fout<<sol[i1]<<" ";
}
return 0;
}
/*
#include <bits/stdc++.h>
#define nmax 500005
using namespace std;
int st[nmax], dr[nmax], q[nmax], poz[nmax];
int N, M, K;
bool viz[nmax];
vector <int> L[nmax];
inline void Citire()
{
ifstream fin("ciclueuler.in");
fin >> N >> M;
for(int i = 1; i <= M; i++)
{
fin >> st[i] >> dr[i];
L[st[i]].push_back(i);
L[dr[i]].push_back(i);
}
}
inline bool Toate_Pare()
{
for(int i = 1; i <= N; i++)
if(L[i].size() % 2 == 1) return false;
return true;
}
inline void DFS(int nod)
{
while(poz[nod] < L[nod].size())
{
int k = L[nod][poz[nod]++];
if(!viz[k])
{
viz[k] = true;
DFS(st[k] + dr[k] - nod);
}
}
q[++K] = nod;
}
void Euler()
{
ofstream fout("ciclueuler.out");
if(!Toate_Pare()) fout << "-1\n";
else
{
DFS(1);
for(int i = 1; i < K; i++)
fout << q[i] << " ";
fout << "\n";
}
fout.close();
}
int main()
{
Citire();
Euler();
return 0;
}
*/