Pagini recente » Cod sursa (job #2802726) | Cod sursa (job #2043294) | Cod sursa (job #869472) | Cod sursa (job #2914960) | Cod sursa (job #1485665)
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#define Nmax 100010
#define pb push_back
using namespace std;
int n,m1,grad[Nmax],viz[Nmax];
vector<int>::iterator it;
vector<int> m[Nmax];
queue<int> c;
int is_eulerian()
{
int okgrad=1,i,nrvf=0,nod;
c.push(1); viz[1]=1; nrvf=1; if(grad[1]%2==1) okgrad=0;
if(okgrad==0) return 0;
else
{
while(!c.empty())
{
nod=c.front(); c.pop();
for(it=m[nod].begin();it!=m[nod].end();it++)
{
if(grad[*it]%2==1) { okgrad=0; return 0; }
if(!viz[*it]) { c.push(*it); nrvf++; viz[*it]=1; }
}
}
if(nrvf==n) return 1;
else return 0;
}
}
int main()
{
freopen("ciclu.in","r",stdin);
freopen("ciclu.out","w",stdout);
int n1,n2,i;
scanf("%d%d",&n,&m1);
for(;m1;m1--)
{
scanf("%d%d",&n1,&n2);
m[n1].pb(n2);
m[n2].pb(n1);
grad[n1]++; grad[n2]++;
}
if(!is_eulerian()) printf("-1\n");
else
{
}
fclose(stdin);
fclose(stdout);
return 0;
}