比赛 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;
}