比赛 |
20151026 |
评测结果 |
AAAAAAAAAA |
题目名称 |
游历校园 |
最终得分 |
100 |
用户昵称 |
yymxw |
运行时间 |
0.523 s |
代码语言 |
C++ |
内存使用 |
13.00 MiB |
提交时间 |
2017-10-16 21:24:04 |
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return x*f;
}
int n,m,x,y,ji=0,jishu=0,jishu1=0,jishu2=0,jishu3=0,ans,xuan=0;
int head[100010],du[100010],b[100010];
bool vis[100010];
struct bian
{
int qi,zhong,next;
};
bian c[1000010];
void add(int x,int y)
{
c[++jishu].qi=x;
c[jishu].zhong=y;
c[jishu].next=head[x];
head[x]=jishu;
}
void dfs(int x)
{
vis[x]=1;
b[++jishu1]=x;
jishu2++;
for(int i=head[x];i;i=c[i].next)
if(!vis[c[i].zhong]) dfs(c[i].zhong);
}
int main()
{
freopen("sent.in","r",stdin);
freopen("sent.out","w",stdout);
n=read();m=read();
if(m==0)
{
cout<<-1;
return 0;
}
for(int i=1;i<=m;++i)
{
x=read();y=read();
add(x,y);
add(y,x);
du[x]++;
du[y]++;
}
for(int i=1;i<=n;++i)
if(!vis[i])
{
jishu2=0;
jishu1=0;
xuan=0;
dfs(i);
if(i!=1&&jishu2!=1) ans++;
for(int j=1;j<=jishu1;++j)
if(du[b[j]]&1) xuan++;
if(xuan>2) ans+=xuan/2-1;
}
cout<<ans;
return 0;
}