Pagini recente » Cod sursa (job #1192044) | Cod sursa (job #2811856) | Cod sursa (job #1958129) | Cod sursa (job #409824) | Cod sursa (job #339543)
Cod sursa(job #339543)
#include<cstdio>
#include<deque>
#include<stack>
#include<vector>
int n,m,i,j,k,g[100001],nr;
std::vector<int> a[100001];
std::vector<int>::iterator it;
std::stack<int> s;
void conex(int v)
{
++nr;
g[v] = 1;
for(int i = 0;i<a[v].size();++i)
if(!g[a[v][i]])
conex(a[v][i]);
}
int euler()
{
for(i=1;i<=n;++i)
if(g[i]%2) return 0;
memset(g,0,sizeof(g));
conex(1);
return nr == n;
}
void del(int w,int x)
{
for(it = a[w].begin(); it!=a[w].end(); ++it)
if(*it == x) break;
a[w].erase(it);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
for(;m;--m)
{
scanf("%d %d",&i,&j);
++g[i];++g[j];
}
for(i=1;i<=n;++i)
{
a[i].resize(g[i]);
g[i] = 0;
}
fclose(stdin);
freopen("ciclueuler.in","r",stdin);
scanf("%d %d",&n,&m);
for(;m;--m)
{
scanf("%d %d",&i,&j);
a[i][g[i]] = j;
++g[i];
a[j][g[j]] = i;
++g[j];
}
if(!euler())
printf("-1");
else
{
s.push(1);
nr = 0;
while(!s.empty())
{
if(a[s.top()].size() == 0)
{
g[++nr] = s.top();
s.pop();
}
else
{
i = s.top();
j = a[i][0];
a[i].erase(a[i].begin());
del(j,i);
s.push(j);
}
}
for(i=1;i<nr;++i)
printf("%d ",g[i]);
}
fclose(stdout);
return 0;
}