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