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。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 using namespace std;
 8 #define LL long long
 9 #define pa pair<int,int>
10 const int maxn=10010;
11 const LL minf=(LL)5e17;
12 int n,m;
13 struct nod{
14     int x,y,next;
15 }e[maxn*20];
16 int head[maxn]={},tot=1;
17 int dfn[maxn]={},low[maxn]={},cut[maxn]={},cnt=0;
18 inline void init(int x,int y){
19     e[++tot].y=y;e[tot].next=head[x];head[x]=tot;
20 }
21 void dfs(int x,int p){
22     dfn[x]=low[x]=++cnt;
23     for(int i=head[x];i;i=e[i].next){
24         if(!dfn[e[i].y]){
25             dfs(e[i].y,x);
26             low[x]=min(low[x],low[e[i].y]);
27             if(low[e[i].y]>=dfn[x])++cut[x];
28         }
29         else low[x]=min(dfn[e[i].y],low[x]);
30     }
31 }
32 int main(){
33     while(~scanf("%d%d",&n,&m)){
34         if(n==0&&m==0)break;
35         int x,y;tot=0;
36         memset(head,0,sizeof(head));
37         memset(dfn,0,sizeof(dfn));
38         memset(cut,0,sizeof(cut));
39         for(int i=1;i<=m;i++){
40             scanf("%d%d",&x,&y);++x;++y;
41             init(x,y);init(y,x);
42         }
43         int ans=0,ff=-10000;
44         for(int i=1;i<=n;i++)if(!dfn[i]){dfs(i,0);cut[i]--;ans++;}
45         for(int i=1;i<=n;i++)ff=max(ff,cut[i]);
46         printf("%d\n",ans+ff);
47     }
48     return 0;
49 }

View Code

转载于:https://www.cnblogs.com/137shoebills/p/9062435.html

POJ 2117 Electricity 双联通分量 割点相关推荐

  1. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  2. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)

    [题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...

  3. POJ 3177 Redundant Paths(边双联通分量)

    题目描述: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1 ...

  4. 『Tarjan算法 无向图的双联通分量』

    无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...

  5. 【BZOJ2730】【codevs1996】矿场建设,点双联通分量

    传送门1 传送门2 思路: 前段时间学习的tarjan求双联通分量 练习的时候碰到了这样一道蛋疼的题 基本思路还是显而易见的,考虑分割联通快及计算大小来求出答案 由于之前写的都是边双联通分量,可以把无 ...

  6. 大白书中无向图的点双联通分量(BCC)模板的分析与理解

    对于一个无向图,如果任意两点至少存在两条点不重复(除起点和终点外无公共点)的路径,则这个图就是点双联通. 这个要求等价于任意两条边都存在于一个简单环(即同一个点不能在圈中出现两次)中,即内部无割点. ...

  7. 双联通分量求简单环(Educational Codeforces Round 42: F. Simple Cycles Edges)

    题意: n个点m条边的无向图,问有哪些边在一个简单环上,按顺序输出这些边的编号 思路: 对于无向图求出每个双联通分量,对于每个双联通分量,如果点的个数==边的个数,那么这个双联通分量就是个简单环,输出 ...

  8. 强连通分量/点双连通分量/边双联通分量 总结

    前言 % 被某brz逼着问,觉得很有必要好好复习一下这 些 毒瘤东西. 定义 % 连通 如果有向图中的两点 uuu,vvv 间同时存在 uuu 到 vvv 的路径及 vvv 到 uuu 的路径,则称点 ...

  9. 强联通分量,双联通分量详解

    正题 强联通分量 我们开两个数组 l o w , d f n low,dfn low,dfn . d f n dfn dfn 表示 i i i 点的 d f s dfs dfs 序, l o w lo ...

  10. 点双联通分量,圆方树和广义圆方树

    点双联通分量 边双联通分量想必看这篇博客的同学就会,并且边双联通分量理解和打起来比较简单,就不再赘述了. 点双联通分量,类比边双的定义,它是原图的极大无向子图,满足删去子图中任意一个节点以及与其相邻的 ...

最新文章

  1. 视觉语言研究进展到哪了?CVPR2021视觉语言研究全面概述,附430页ppt
  2. [Elasticsearch] 部分匹配 (三) - 查询期间的即时搜索
  3. spring配置文件中非bean标签的原理解析
  4. OSPF中DR和BDR作用简述
  5. Hybris订单价格的折扣维护
  6. 进击吧! Blazor 第一期
  7. C#创建桌面快捷方式
  8. c语言给定一个字符串匹配,使用C语言解决字符串匹配问题的方法
  9. NameNode之文件系统目录树
  10. SilverLight:布局(3)StackPanel 对象
  11. Python 进阶 —— defaultdict
  12. Java:对于Borderlayout布局管理的理解
  13. 基于荔枝派Lichee Nano(全志f1c100s)的u-boot移植(一)
  14. 银行业数据安全建设要点分析2022
  15. C语言歌手评分系统(入门水平)
  16. PS网页设计教程XVII——在Photoshop中设计创意组合网页
  17. Causal Representation Learning for Out-of-Distribution Recommendation
  18. vista操作系统,从自带ie7升级到ie8,后引起ie不能上网问题的解决.
  19. 1.PSTN与VoIP基础
  20. 从微软下载Windows11操作系统镜像

热门文章

  1. 面试百度、阿里、腾讯,这134道Java面试题你会多少?
  2. Linux性能测试与调优最常用的15条命令
  3. 承认吧,你就是不行!
  4. jboss7学习2-jboss7入门(端口和访问的ip问题)
  5. PTA-1015——Reversible Primes
  6. Java多线程系列---“JUC原子类”06之 AtomicLongFieldUpdater原子类
  7. 重新安装Linux自带的JDK
  8. hdu-5656 CA Loves GCD(dp+数论)
  9. C语言 文件操作5--文件的常用函数
  10. ubuntu 上的python不能解析jpeg,png?