Mai intai trebuie sa te autentifici.

Cod sursa(job #2238940)

Utilizator mateicosCostescu Matei mateicos Data 8 septembrie 2018 14:39:04
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <stack>

using namespace std;

vector <int> g[100005];
stack <int> st;
vector <int> sol;

void euler(int u){
  int v;
  while(g[u].size()){
    st.push(u);
    v = g[u].back();
    g[u].pop_back();
    g[v].erase(find(g[v].begin(), g[v].end(), u));
    u = v;
  }
}

int main()
{
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);
    int n, x, a, b, m, i, ok;
    scanf("%d%d", &n, &m);
    for(i= 0;i < m;i++){
      scanf("%d%d", &a, &b);
      g[a].push_back(b);
      g[b].push_back(a);
    }
    ok = 1;
    for(i = 1;i <= n;i++){
      if(g[i].size() == 0 || g[i].size() % 2 != 0)
        ok = 0;
    }
    //if(ok){
      x = 1;
      do{
        euler(x);
        x = st.top();
        sol.push_back(x);
        st.pop();
      }
      while(!st.empty());
      for(int i = 0;i < (int)sol.size();i++){
        printf("%d ", sol[i]);
      }
    //}
    //else
    //  printf("-1");
    return 0;
}