Cod sursa(job #1802955)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 10 noiembrie 2016 20:34:20
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.83 kb
#include <bits/stdc++.h>
#define nmax 500005
using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int ah,n,m,x,y,k,ok,g[nmax],sol[nmax],X[nmax],Y[nmax],poz[nmax];
bool Liz1[nmax];
vector<int>L[nmax];
inline void DFS(int nod)
{//ah++;cout<<ah<<" ";
while(poz[nod]<L[nod].size())
{int qq=L[nod][poz[nod]];
 if(Liz1[qq]!=1){Liz1[qq]=true;
DFS(X[qq]+Y[qq]-nod);
}
poz[nod]++;
}

sol[++k]=nod;

}
int main()
{int i1;
fin>>n>>m;
for(i1=1;i1<=m;i1++)
{fin>>x>>y;
//cout<<x<<" "<<y<<"\n";
g[x]++;
g[y]++;
L[x].push_back(i1);
L[y].push_back(i1);
X[i1]=x;
Y[i1]=y;
}
for(i1=1;i1<=n;i1++)
if(g[i1]%2==1)ok=1;
if(ok==1)fout<<"-1\n";
else{
DFS(1);
for(i1=1;i1<=m;i1++)
fout<<sol[i1]<<" ";
}
return 0;
}
/*
#include <bits/stdc++.h>
#define nmax 500005
using namespace std;

int st[nmax], dr[nmax], q[nmax], poz[nmax];
int N, M, K;
bool viz[nmax];
vector <int> L[nmax];

inline void Citire()
{
    ifstream fin("ciclueuler.in");
    fin >> N >> M;
    for(int i = 1; i <= M; i++)
    {
        fin >> st[i] >> dr[i];
        L[st[i]].push_back(i);
        L[dr[i]].push_back(i);
    }
}
inline bool Toate_Pare()
{
    for(int i = 1; i <= N; i++)
        if(L[i].size() % 2 == 1) return false;
    return true;
}

inline void DFS(int nod)
{
    while(poz[nod] < L[nod].size())
    {
        int k = L[nod][poz[nod]++];
        if(!viz[k])
        {
            viz[k] = true;
            DFS(st[k] + dr[k] - nod);
        }
    }
    q[++K] = nod;
}

void Euler()
{
    ofstream fout("ciclueuler.out");
    if(!Toate_Pare()) fout << "-1\n";
    else
    {
        DFS(1);
        for(int i = 1; i < K; i++)
            fout << q[i] << " ";
        fout << "\n";
    }
    fout.close();
}

int main()
{
    Citire();
    Euler();
    return 0;
}
*/