Cod sursa(job #1830977)

Utilizator nicholascantarNicholas David Cantar Gogitidze nicholascantar Data 17 decembrie 2016 11:58:28
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

using namespace std;
int viz[100001],p,u,n;
struct nod
{
    int inf;
    nod* urm;
}*v[100010];
void adaugare (nod*&prim, int x)
{
    nod*nou;
    nou=new nod;
    nou->inf=x;
    nou->urm=NULL;
    if(prim==NULL)
    prim=nou;
    else
    {
        nou->urm=prim;
        prim=nou;
    }
}
void DF (int i)
{
    viz[i]=1;
    nod*p;
    for(p=v[i];p!=NULL;p=p->urm)
        if(viz[p->inf]==0) DF(p->inf);
}
int grad (int x)
{
    int nr;
    nod*p;
    nr=0;
    p=v[x];
    while(p)
    {
        nr++;
        p=p->urm;
    }
    return nr;
}
int conex()
{
    int i;
    DF(1);
    for(i=1;i<=n;i++)
        if(viz[i]==0) return 0;
    return 1;
}
int main()
{
    ifstream fin ("ciclueuler.in");
    ofstream fout ("ciclueuler.out");
    int m,x,y,i,ok;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        adaugare(v[x],y);
        adaugare(v[y],x);
    }
    ok=1;
    for(i=1;i<=n;i++)
        if(grad(i)%2==1||grad(i)==0) ok=0;
    if(ok==0||!conex()) fout<<"-1";
    else fout<<"1";
    return 0;
}