Cod sursa(job #2468672)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 5 octombrie 2019 19:23:25
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
#include <bitset>
#define DIM 100010
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,i,x,y,d[DIM],st[5*DIM],k,nod,vecin,muchie;
vector< pair<int,int> > L[DIM];
bitset<5*DIM> f;
void dfs(int nod) {
    f[nod]=1;
    for (int i=0;i<L[nod].size();i++) {
        int vecin=L[nod][i].first;
        if (f[vecin]==0)
            dfs(vecin);
    }
}
int main() {
    fin>>n>>m;
    for (i=1;i<=m;i++) {
        fin>>x>>y;
        L[x].push_back({y,i});
        L[y].push_back({x,i});
        d[x]++, d[y]++;
    }
    dfs(1);
    for (i=1;i<=n;i++) {
        if (d[i]%2==1||(f[i]==0&&d[i]>0)) {
            fout<<-1;
            return 0;
        }
    }
    f.reset();
    st[++k]=1;
    while (k) {
        nod=st[k];
        if (d[nod]==0) {
            if (k!=1)
                fout<<nod<<" ";
            k--;
            continue;
        }
        while (f[L[nod].back().second]==1)
            L[nod].pop_back();
        vecin=L[nod].back().first;
        muchie=L[nod].back().second;
        st[++k]=vecin;
        L[nod].pop_back();
        d[nod]--, d[vecin]--, f[muchie]=1;
    }
    return 0;
}