Cod sursa(job #2562141)

Utilizator olteanupetru02Olteanu Petru olteanupetru02 Data 29 februarie 2020 12:29:13
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;

ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");

const int N = 100000;
const int M = 500000;
int n,m,ciclu[M],nc,nr;
struct muchie{
    int x,y;
    bool sters;
};
muchie vm[M];
int edg[2*M],urm[2*M],lst[N];

void dfs(int x){
    muchie e;
    int y;
    for(int p=lst[x];p!=0;p=urm[p]){
        e = vm[edg[p]];
        if(e.sters)
            continue;
        y = e.x + e.y - x;
        vm[edg[p]].sters = true;
        lst[x] = urm[p];
        dfs(y);
    }
    ciclu[nc++] = x;
}
int main()
{
    in>>n>>m;
    for(int i=0;i<=n;i++){
        in>>vm[i].x>>vm[i].y;
        edg[++nr] = i;
        urm[nr] = lst[vm[i].x];
        lst[vm[i].x] = nr;
        edg[++nr] = i;
        urm[nr] = lst[vm[i].y];
        lst[vm[i].y] = nr;
    }
    dfs(1);
    if(nc != m+1){
        out<<"-1";
        return 0;
    }
    for(int i=1;i<nc;i++)
        out<<ciclu[i]<<' ';
    return 0;
}