Cod sursa(job #1621176)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 29 februarie 2016 17:18:26
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int NMAX = 100001;
int n,m;
vector<int> muchii[NMAX];
int grade[NMAX];
queue<int> coada;
bitset<NMAX> mark;

void citire()
{
    in>>n>>m;
    int x,y;
    for(int i=1;i<=m;i++)
    {
        in>>x>>y;
        grade[x]++;
        grade[y]++;
        muchii[x].push_back(y);
        muchii[y].push_back(x);
    }
    in.close();
}

int bfs()
{
    coada.push(1);
    int x;
    int nr = 1;
    mark.set(1);
    while(!coada.empty())
    {
        x = coada.front();
        for(unsigned int i = 0;i < muchii[x].size();i++)
            if(!mark.test(muchii[x][i]))
            {
                coada.push(muchii[x][i]);
                nr++;
                mark.set(muchii[x][i]);
            }
        coada.pop();
    }
    return nr;
}

int ok()
{
    int check= 1;
    for(int i=1;i<=n;i++)
    if(grade[i]%2==1)
    {
        check = 0;
        break;
    }
    if((check) && (bfs()==n))
        return 1;
    return 0;
}

int main()
{
    citire();
    if(!ok())
        out<<-1;
        else
        {

        }
    return 0;
}