Cod sursa(job #2128173)

Utilizator xRoALexBirtoiu Alexandru xRoALex Data 11 februarie 2018 15:16:26
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;

FILE * in=fopen("ciclueuler.in","r");
FILE * out=fopen("ciclueuler.out","w");

int n,m,visited[500005];
vector <pair <int,int>> G[100005];
stack <int> q;
vector <int> ans;

int main()
{
    fscanf(in,"%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        int x,y;
        fscanf(in,"%d%d",&x,&y);
        G[x].push_back({y,i});
        G[y].push_back({x,i});
    }
    for(int i=1;i<=n;i++)
        if(G[i].size() &1  || !G[i].size())
            fprintf(out,"-1\n");
    q.push(1);
    while(!q.empty())
    {
        int nod =q.top();
        if(G[nod].empty())
        {
            q.pop();
            ans.push_back(nod);
        }
        else
        {
            int x,y;
            x = G[nod].back().first;
            y = G[nod].back().second;
            G[nod].pop_back();
            if(!visited[y])
            {
                visited[y]=1;
                q.push(x);
            }
        }
    }
    for(int i=0;i<m;i++)
        fprintf(out,"%d ",ans[i]);
    return 0;
}