Pagini recente » Cod sursa (job #1449741) | Cod sursa (job #1403070) | Cod sursa (job #933469) | Cod sursa (job #107908) | Cod sursa (job #1830977)
#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;
}