记录编号 199973 评测结果 AAAAAAAAAA
题目名称 游历校园 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 1.005 s
提交时间 2015-10-27 20:03:24 内存使用 1.93 MiB
显示代码纯文本
#include<cstdio>
#include<vector>
using namespace std;
vector<int>A[100005];
vector<int>B;
int n,m,scc,s,Ans,du[100005],siz;
bool vis[100005];
void dfs(int x){
	vis[x]=1; B.push_back(x);siz++;
	for(int i=0;i<A[x].size();++i)
		if(!vis[A[x][i]]) dfs(A[x][i]);
}
int main(){
    freopen("sent.in","r",stdin);
	freopen("sent.out","w",stdout);
	scanf("%d%d",&n,&m);
	if(m==0){
		printf("-1"); return 0;
	}
	for(int i=1;i<=m;++i){
		int x,y;
		scanf("%d%d",&x,&y);
		du[x]++; du[y]++;
		A[x].push_back(y);
		A[y].push_back(x);
	}
	for(int i=1;i<=n;++i){
		if(!vis[i]) {
		   siz=0;
		   B.clear();
		   dfs(i);
		   if(siz>1) scc++;
		   s=0;
		   for(int j=0;j<B.size();++j){
			if(du[B[j]]&1) s++;
		   }
		   if(scc==1){
              if(s>2) Ans+=(s-2)/2;
		   }
           else
		     if(s>2) Ans+=s/2-1;
		}
	}
	Ans+=scc-1;
	printf("%d",Ans);
	return 0;
}