Cod sursa(job #2333760)

Utilizator Raresr14Rosca Rares Raresr14 Data 1 februarie 2019 21:57:57
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,i,x,y,k,g[100010],s[500050],f[500050],ok=1;
vector< pair<int, int> > L[100010];
void dfs(int nod){
    f[nod]=1;
    for(int i=0;i<L[nod].size();i++)
        if(f[L[nod][i].first]==0)
            dfs(L[nod][i].first);
}
int main(){
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>x>>y;
        L[x].push_back(make_pair(y,i));
        L[y].push_back(make_pair(x,i));
        g[x]++;
        g[y]++;
    }
    dfs(1);
    for(i=1;i<=n;i++)
        if(f[i]==0||g[i]%2==1){
            fout<<-1;
            return 0;
        }
    for(i=1;i<=n;i++)
        f[i]=0;
    s[++k]=1;
    while(k){
        int nod=s[k];
        if(g[nod]==0){
            if(k!=1)
                fout<<nod<<" ";
            k--;
            continue;
        }
        while(f[L[nod].back().second]==1)
            L[nod].pop_back();
        int vec=L[nod].back().first;
        s[++k]=vec;
        f[L[nod].back().second]=1;
        L[nod].pop_back();
        g[nod]--;
        g[vec]--;
    }
    return 0;
}