Pagini recente » Cod sursa (job #2678328) | Cod sursa (job #3253023) | Cod sursa (job #243996) | Cod sursa (job #1604212) | Cod sursa (job #492966)
Cod sursa(job #492966)
#include<fstream>
#include<vector>
#define maxn 100005
using namespace std;
int grad [maxn], viz[maxn], s[500010], c[maxn], ms[500010];
vector< pair<int,int> > v[maxn];
void dfs (int nod){
viz[nod] = 1;
for (int i = 0; i < v[nod].size(); i++)
if (viz[v[nod][i].first] == 0)
dfs(v[nod][i].first);
}
int main(){
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int m, n;
f>>n>>m;
int i, j, k, x, y;
for (i = 1; i <= m; i++){
f>>x>>y;
v[x].push_back(make_pair(y, i));
v[y].push_back(make_pair(x, i));
grad[x]++;
grad[y]++;
}
int cod = 1;
for (i = 1; i <= n; i++)
if (grad[i] % 2 == 1){
cod = -1;
break;
}
if (cod == 1)
dfs(1);
for (i = 1; i <= n; i++)
if (viz[i] == 0){
cod = -1;
break;
}
if (cod == -1){
g<<cod<<'\n';
}
else {
int vf = 1;
s[1] = 1;
while (vf > 0){
x = s[vf];
while (c[x] < v[x].size() && ms[v[x][c[x]].second] == 1)
c[x]++;
if (c[x] >= v[x].size()){
g<<x<<" ";
vf--;
}
else {
ms[v[x][c[x]].second] = 1;
vf++;
s[vf] = v[x][c[x]].first;
}
}
}
return 0;
}