POJ 2117 Electricity 双联通分量 割点
http://poj.org/problem?id=2117
这个妹妹我竟然到现在才见过,我真是太菜了~~~
求去掉一个点后图中最多有多少个连通块。(原图可以本身就有多个连通块)
首先设点i去掉后它的子树(我知道不准确但是领会精神就好了吧orz)能分成cut[i]个连通块,那么除了根节点之外去掉任意一个点就多出cut[i]个联通块(根节点多出cut[i]-1个连通块)。
(简洁的语言说cut[i]表示的就是i点是多少个点双连通分量的割顶,我连割顶都忘了是什么了嘤嘤嘤)
每个点只遍历一次且一定在所在连通块(子树)被割点切割时被遍历,遍历过之后判断这个子节点是否从割点被切割( low[y]>=x )就得到cut了。
注意cut[i]可以为负,当一个点单独作为连通块时它的cut[i]就是-1。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
#define LL long long
#define pa pair<int,int>
const int maxn=;
const LL minf=(LL)5e17;
int n,m;
struct nod{
int x,y,next;
}e[maxn*];
int head[maxn]={},tot=;
int dfn[maxn]={},low[maxn]={},cut[maxn]={},cnt=;
inline void init(int x,int y){
e[++tot].y=y;e[tot].next=head[x];head[x]=tot;
}
void dfs(int x,int p){
dfn[x]=low[x]=++cnt;
for(int i=head[x];i;i=e[i].next){
if(!dfn[e[i].y]){
dfs(e[i].y,x);
low[x]=min(low[x],low[e[i].y]);
if(low[e[i].y]>=dfn[x])++cut[x];
}
else low[x]=min(dfn[e[i].y],low[x]);
}
}
int main(){
while(~scanf("%d%d",&n,&m)){
if(n==&&m==)break;
int x,y;tot=;
memset(head,,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(cut,,sizeof(cut));
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);++x;++y;
init(x,y);init(y,x);
}
int ans=,ff=-;
for(int i=;i<=n;i++)if(!dfn[i]){dfs(i,);cut[i]--;ans++;}
for(int i=;i<=n;i++)ff=max(ff,cut[i]);
printf("%d\n",ans+ff);
}
return ;
}
POJ 2117 Electricity 双联通分量 割点的更多相关文章
- poj 2117 Electricity(tarjan求割点删掉之后的连通块数)
题目链接:http://poj.org/problem?id=2117 题意:求删除一个点后,图中最多有多少个连通块. 题解:就是找一下割点,根节点的割点删掉后增加son-1(son为子树个数),非根 ...
- 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】
1 build1.1 Description从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命令执行 ...
- Tarjan 强连通分量 及 双联通分量(求割点,割边)
Tarjan 强连通分量 及 双联通分量(求割点,割边) 众所周知,Tarjan的三大算法分别为 (1) 有向图的强联通分量 (2) 无向图的双联通分量(求割点,桥) ...
- POJ 3177 Redundant Paths 双联通分量 割边
http://poj.org/problem?id=3177 这个妹妹我大概也曾见过的~~~我似乎还没写过双联通分量的blog,真是智障. 最少需要添多少条边才能使这个图没有割边. 边双缩点后图变成一 ...
- POJ 2942 Knights of the Round Table 补图+tarjan求点双联通分量+二分图染色+debug
题面还好,就不描述了 重点说题解: 由于仇恨关系不好处理,所以可以搞补图存不仇恨关系, 如果一个桌子上面的人能坐到一起,显然他们满足能构成一个环 所以跑点双联通分量 求点双联通分量我用的是向栈中pus ...
- 【POJ 2942】Knights of the Round Table(双联通分量+染色判奇环)
[POJ 2942]Knights of the Round Table(双联通分量+染色判奇环) Time Limit: 7000MS Memory Limit: 65536K Total Su ...
- POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)
[题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...
- 『Tarjan算法 无向图的双联通分量』
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...
- 大白书中无向图的点双联通分量(BCC)模板的分析与理解
对于一个无向图,如果任意两点至少存在两条点不重复(除起点和终点外无公共点)的路径,则这个图就是点双联通. 这个要求等价于任意两条边都存在于一个简单环(即同一个点不能在圈中出现两次)中,即内部无割点. ...
随机推荐
- web项目打包后在代码中获取资源文件
在web项目里面,有时代码里面需要引用一些自定义的配置文件,这些配置文件如果放在类路径下,项目经过打包后使用的相对路径也会发生变化,所以以下给出了三种解决方案. 一.properties下配置 在类路 ...
- 将网址url中的参数转化为JSON格式
网上方法很多,各种奇技淫巧,这里贴上一种较为正常的思路. 主要利用split对获取的字符串不断进行分割,最后获得所需要的格式. 代码如下 <!DOCTYPE html> <html ...
- 洛谷 P4592: bzoj 5338: [TJOI2018]异或
题目传送门:洛谷P4592. 题意简述: 题面说的很清楚了. 题解: 发现没有修改很快乐.再看异或最大值操作,很容易想到可持久化 01trie. 这里要把 01trie 搬到树上,有点难受. 树剖太捞 ...
- 【codeforces】【比赛题解】#869 CF Round #439 (Div.2)
良心赛,虽然我迟了半小时233333. 比赛链接:#869. 呃,CF的比赛都是有背景的……上次是<哈利波特>,这次是<物语>…… [A]巧妙的替换 题意: Karen发现了石 ...
- Mysql_Learning_Notes_mysql系统结构_2
Mysql_Learning_Notes_mysql系统结构_2 三层体系结构,启动方式,日志类型及解析方法,mysql 升级 连接层 通信协议处理\线程处理\账号认证(用户名和密码认证)\安全检查等 ...
- 如何使用vs2012单步调试uGUI(unity3d 5.3f4)
下载uGUI源代码 uGUI源代码地址:https://bitbucket.org/Unity-Technologies/ui 下载代码工具:tortoisehg-3.6.2-x64.msi http ...
- 我所知道的MVVM框架(转 司徒大大 )
RubyLouvre commented on 6 Sep 2014 avalon http://avalonjs.github.io/ (使用Object.defineProperties. V ...
- 查看sql语句加锁信息
问题: 最近使用quartz集群,总是报deadlock问题,所以需要查看一下执行的sql导致的加锁冲突. 步骤: 1.在要测试的库中创建指定表innodb_lock_monitor create t ...
- CCScale9Sprite 的 setContentSize setPreferredSize 区别
CCScale9Sprite 设置图片大小方式: updateButtonSpriteMark->setContentSize(size);//设置图片的原始大小设置节点的未转换大小.无论节点被 ...
- SQLAlchemy-介绍安装
一:概述 SQLAlchemy的SQL工具包和对象关系映射是一个全面的工具集,用来处理数据库和Python. 它有几个不同的功能领域,可以单独使用或组合使用. 所示的主要组件,组件依赖关系组织成层: ...