Cod sursa(job #1547974)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 10 decembrie 2015 10:36:02
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<cstdio>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
int grad[100010];
bool seen[500010];
struct edge{int node,index;};
vector<edge> g[100010];
stack<int> s;
void euler() {
    int nod,fiu;
    s.push(1);
    while(!s.empty()){
        nod=s.top();
        while(!g[nod].empty()&&seen[g[nod].back().index]==true)
            g[nod].pop_back();
        if(!g[nod].empty()){
            fiu=g[nod].back().node;
            s.push(fiu);
            seen[g[nod].back().index]=true;
            g[nod].pop_back();
        }
        else{
            if(s.size()>1)
                printf("%d ",nod);
            s.pop();
        }
    }
}

int main(){
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    int n,m,i,a,b;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++) {
        scanf("%d%d",&a,&b);
        g[a].push_back({b, i});
        g[b].push_back({a, i});
        grad[a]++;
        grad[b]++;
    }
    for(i=1;i<=n;i++)
        if(grad[i]%2==1){
            printf("-1");
            return 0;
        }
    euler();
    return 0;
}