BZOJ 4238: 电压 DFS树
分类讨论一下奇环和偶环的情况.
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;
}
BZOJ 4238: 电压 DFS树的更多相关文章
- BZOJ 4238 电压 解题报告
BZOJ 4238 电压 考虑一条边成为答案以后,删去Ta后剩下的图是一个或很多个二分图,即没有奇环 则一条边可以成为答案,当且仅当自己在所有奇环的交上且不在偶环上. 考虑建出dfs树,那么返祖边一定 ...
- 【BZOJ4238】电压 DFS树
[BZOJ4238]电压 Description 你知道Just Odd Inventions社吗?这个公司的业务是“只不过是奇妙的发明(Just Odd Inventions)”.这里简称为JOI社 ...
- bzoj 4238 电压
LINK:电压 一张图 每个点可以为黑点或百点 每一条边的两端都必须为一黑一白.询问又多少条边满足除了这条边不满足条件其余所有边都满足条件. 分析一下这个所谓的条件 每一条边的两端必须为一黑一白 所以 ...
- BZOJ_4238_电压_树上差分+dfs树
BZOJ_4238_电压_树上差分+dfs树 Description 你知道Just Odd Inventions社吗?这个公司的业务是“只不过是奇妙的发明(Just Odd Inventions)” ...
- bzoj4238 & loj2881 电压 二分图判定+dfs树
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4238 https://loj.ac/problem/2881 题解 如果想要让每一条边都有电流 ...
- 【BZOJ】1023: [SHOI2008]cactus仙人掌图 静态仙人掌(DFS树)
[题意]给定仙人掌图(每条边至多在一个简单环上),求直径(最长的点对最短路径).n<=50000,m<=10^7. [算法]DFS树处理仙人掌 [题解]参考:仙人掌相关问题的处理方法(未完 ...
- dfs树
dfs树是解决图中带环的利器. 前天CF的F题就是dfs树,但是当时我没有认真思考 觉着找到一个环过于困难 当时没有想到 也没理解dfs树的意义. 对于一张无向图求出一个dfs树 这个树有两种边 树边 ...
- [BZOJ 2759] 一个动态树好题
[BZOJ 2759] 一个动态树好题 题目描述 首先这是个基环树. 然后根节点一定会连出去一条非树边.通过一个环就可以解除根的答案,然后其他节点的答案就可以由根解出来. 因为要修改\(p_i\),所 ...
- zstu.4191: 无向图找环(dfs树 + 邻接表)
4191: 无向图找环 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 117 Solved: 34 Description 给你一副无向图,每条边有 ...
随机推荐
- 一、Mongodb安装和配置
简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品. Mongod ...
- MySQL中遍历查询结果的常用API(c)
本中所使用的table: MySQL中的错误处理函数 unsigned int mysql_errno(MYSQL *mysql) const char *mysql_error(MYSQL *mys ...
- C和C++中字符串与数的转换
以下内容来自<C/C++程序设计实用案例教程> 1.在C语言中的转换方式 1.1数字转换为字符串 在C语言中,sprintf函数可以将任何多个数字格式化为指定格式的字符串,sprintf函 ...
- step1:准备歌词之《前端开发是个啥》
以下是给大家介绍前端开发的填词,曲子是李圣杰的<最近>,大家喜欢可以试试唱. 点赞关注超过100的平台,我后续上来发本人原唱视频(目前正在练习中...),另外大家觉得哪些词写得不好的,欢迎 ...
- 基于MR实现ngram语言模型
在大数据的今天,世界上任何一台单机都无法处理大数据,无论cpu的计算能力或者内存的容量.必须采用分布式来实现多台单机的资源整合,来进行任务的处理,包括离线的批处理和在线的实时处理. 鉴于上次开会讲了语 ...
- css常用元素通用样式表
@charset "utf-8";html,body,a,h1,h2,h3,h4,h5,h6,p,a,b,i,em,s,u,dl,dt,dd,ul,ol,li,strong,spa ...
- 在Linux实例上自动安装并运行VNC Server
#!/bin/bash ######################################### #Function: install vnc server #Usage: bash ins ...
- centos输入正确密码后依旧无法登陆问题
输入正确用户名和密码时依旧无法登录. 进入单用户模式重置密码: 开机启动时,按‘E’键(倒计时结束前)进入界面 选择第二项,按‘E’键再次进入 在最后一行添加‘ 1’(空格 1) 回车键保存,回到该界 ...
- Git 工作流程和Git分支管理策略
git-flow 阮一峰大佬写的文章真不错 git-flow, github-flow, gitlab-flow 阮一峰大佬写的文章真不错
- Android开发之adt bundle安装
这个学期开了一门手机游戏开发的课,所以就接触到了adt bundle,Android开发环境有三种方式,分别是JDK+SDK+Eclipse+ADT.JDK+adt-bundle与JDK+Androi ...