Cod sursa(job #3198675)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 30 ianuarie 2024 05:17:39
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include<bits/stdc++.h>
using namespace std;
ifstream F("ciclueuler.in");
ofstream G("ciclueuler.out");
int n,m,i,j,k,l,t,r;
vector<int> g[100001];
bitset<100001> u;
vector<int> s;
void B(int i)
{
    u[i]=1;
    for(int j:g[i])
        if(!u[j])
            B(j);
}
int main()
{
    for(F>>n>>m;m--;F>>i>>j,g[i].push_back(j),g[j].push_back(i));
    for(i=1;i<=n;++i) {
        if(g[i].size()&1)
            ++k,l=i;
        if(g[i].size()&&!t)
            t=i;
    }
    if(k>2||k==1)
        return G<<-1,0;
    if(!l)
        l=t;
    for(B(l),i=1;i<=n;++i)
        if(!u[i]&&g[i].size())
            return G<<-1,0;
    for(i=l,s.push_back(i);!s.empty();)
        if(g[i].size())
            s.push_back(i),j=g[i].back(),g[i].pop_back(),g[j].erase(find(g[j].begin(),g[j].end(),i)),i=j;
        else if(s.size()>1)
            G<<i<<' ',i=s.back(),s.pop_back();
        else
            s.pop_back();
    return 0;
}