Pagini recente » Cod sursa (job #667589) | Diferente pentru home intre reviziile 172 si 173 | Cod sursa (job #1790836) | Cod sursa (job #2018461) | Cod sursa (job #2013875)
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
FILE *F=fopen("ciclueulerian.in", "r"), *G=fopen("ciclueulerian.out", "w");
int n, m, x, y, grd[100005], lng[100005], L;
stack<int> st;
vector<pair<int, int> > a[100005];
bitset<500005> u;
int main()
{
fscanf(F, "%d %d ", &n, &m);
for(int i = 1; i <= m; ++ i)
{
fscanf(F, "%d %d ", &x, &y);
a[x].push_back({y, i});
a[y].push_back({x, i});
grd[x]++; grd[y]++;
}
for(int i = 1; i <= n; ++ i)
if(!grd[i] || grd[i]%2)
{
fprintf(G, "%d", -1);
return 0;
}
st.push(1);
while(!st.empty())
{
x = st.top();
L = a[x].size();
while(lng[x] < L)
{
if(!u[a[x][lng[x]].s])
{
u[a[x][lng[x]].s] = 1;
st.push(a[x][lng[x]].f);
break;
}
lng[x]++;
}
if(lng[x] == L)
{
fprintf(G, "%d ", x);
if(!st.empty()) st.pop();
}
}
return 0;
}