记录编号 |
199973 |
评测结果 |
AAAAAAAAAA |
题目名称 |
游历校园 |
最终得分 |
100 |
用户昵称 |
forever |
是否通过 |
通过 |
代码语言 |
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;
}