Pagini recente » Cod sursa (job #1468732) | Cod sursa (job #1735183)
#include <bits/stdc++.h>
using namespace std;
unsigned int N, M;
unsigned int u, v;
const int MAX=100001;
vector <int> G[MAX], H[MAX];
deque <int> Q;
bool seen[MAX*5];
unsigned int degree[MAX];
unsigned int node, x, y;
unsigned int i;
int main ()
{
freopen("ciclueuler.in","r",stdin);
scanf("%d %d",&N,&M);
for (i=1; i<=M; i++)
{
scanf("%d %d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
H[u].push_back(i);
H[v].push_back(i);
degree[u]++;
degree[v]++;
}
freopen("ciclueuler.out","w",stdout);
for (i=1; i<=N; i++)
if (degree[i]&1 == 1)
{
printf("-1");
return 0;
}
Q.push_back(1);
while (!Q.empty())
{
node = Q.back();
if (degree[node] == 0)
{
printf("%d ",node);
Q.pop_back();
}
else
{
x = G[node].back();
y = H[node].back();
G[node].pop_back();
H[node].pop_back();
if (seen[y] == 0)
{
seen[y] = 1;
Q.push_back(x);
degree[x]--;
degree[node]--;
}
}
}
return 0;
}