分类讨论一下奇环和偶环的情况.

code:

#include <bits/stdc++.h>
#define N 200006
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int edges=1;
int hd[N],to[N<<1],nex[N<<1],dep[N],ev[N],od[N],fa[N<<1],vis[N<<1],gg[N],OD,EV;
void add(int u,int v)
{
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v;
}
void dfs(int u,int ff)
{
gg[u]=1;
for(int i=hd[u];i;i=nex[i])
{
int v=to[i];
if(vis[i]) continue;
vis[i]=vis[i^1]=1;
if(!gg[v])
{
dep[v]=dep[u]+1;
fa[v]=i;
dfs(v,u);
od[u]+=od[v];
ev[u]+=ev[v];
}
else
{
if(dep[v]>dep[u]) continue;
if((dep[u]-dep[v])%2==0)
{
// 奇环
od[u]++;
od[v]--;
++OD;
}
else
{
ev[u]++;
ev[v]--;
++EV;
}
}
}
}
int main()
{
// setIO("input");
int i,j,n,m;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
for(i=1;i<=n;++i) if(!gg[i]) dfs(i,0);
int ans=0;
for(i=1;i<=n;++i) if(od[i]==OD&&ev[i]==0&&fa[i]) ++ans;
if(OD==1) ++ans;
printf("%d\n",ans);
return 0;
}

  

最新文章

  1. JAVA基础 Exception, Error
  2. MapReduce剖析笔记之二:Job提交的过程
  3. npm 发布包
  4. [Android Pro] PackageManager#getPackageSizeInfo (hide)
  5. 关于ButterKnife 8.1.0使用遇到的问题
  6. Linux_ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39;
  7. (转)Linux下apache限速和限制同一IP连接数的实现
  8. QML的渲染方式相较于之前的版本也有了重大的更新(CPU线程负责绘制,GPU线程负责渲染),还有好多经常评论 good
  9. mysql各版本区别
  10. Yii学习笔记之三(在windows 上安装 advanced )
  11. Android apk file
  12. SDWebImage 加载显示 GIF 与性能问题
  13. Linux入门:增加用户,并赋予权限
  14. 非黑即白--谷歌OCR光学字符识别
  15. Spring Data Jpa接口简介
  16. java RSA实现私钥签名、公钥验签、私钥加密数据、公钥解密数据
  17. RTX腾讯通字体全变成横着的了
  18. 记一次ntp反射放大ddos攻击
  19. CentOS卸载通过yum安装的软件
  20. C# Bulk Operations(转)

热门文章

  1. 动手学习pytorch——(3)多层感知机
  2. 文件共享服务之Samba
  3. CNN中的feature map
  4. 如何开始阅读ASP.NET Core源代码
  5. ssh常用命令大全
  6. table-cell设置宽高、居中
  7. Jmeter 连接Redis获取数据集
  8. 手把手教你快速使用数据可视化BI软件创建全球经济贸易分析大屏
  9. pocsuite3使用教程
  10. Java连载73-String方法简介