Cod sursa(job #2540752)
Utilizator | Avram Rares Stefan avramrares | Data | 7 februarie 2020 17:48:24 |
---|---|---|---|
Problema | Ciclu Eulerian | Scor | 80 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.09 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> G[100004];
vector <int> :: iterator it;
list <int> Q;
int n,m,x,y,sol;
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
for(int i=1;i<=n;i++)
{
int l=G[i].size();
if(l%2==1)
{
g<<-1<<'\n';
return 0;
}
}
Q.push_front(1);
while(!Q.empty())
{
int p=Q.front();
if(G[p].empty())
{
if(sol<m)
g<<p<<" ";
sol++;
Q.pop_front();
}
else
{
int last=G[p].back();
G[p].pop_back();
Q.push_front(last);
for(it=G[last].begin(); it!=G[last].end(); it++)
{
if(*it==p)
{
G[last].erase(it);
break;
}
}
}
}
return 0;
}