题目链接


这道题求把点割了之后分的块数,在tanjar中每次遇到low[v]>=dfn[u]且u!=pre就是割点,cut[i]表示i是否为割点,block[i]表示删除一个割点i增加的联通分量数,该题所求删除一个点后的连通分量数,那么还需要加上不删除时本身的联通分量,所以answer+1;

代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define pii make_pair
#define pr pair<int,int>
const int dir[4][2]= {0,-1,-1,0,0,1,1,0};
typedef long long ll;
const ll inFF=9223372036854775807;
typedef unsigned long long ull;
using namespace std;
const int maxn=2e4+5;
int low[maxn],dfn[maxn],cut[maxn],block[maxn];
int Stack[maxn],inStack[maxn],head[maxn],vis[maxn];
int sign,t,top,cnt,n=1000;
struct node
{int to,p;
}edge[maxn<<1];
void add(int u,int v)
{edge[sign]=node{v,head[u]};head[u]=sign++;
}
void init()
{t=top=sign=cnt=0;for(int i=0;i<=n;i++){head[i]=-1;cut[i]=dfn[i]=inStack[i]=block[i]=vis[i]=0;}
}
void tanjar(int u,int pre)
{dfn[u]=low[u]=++t;Stack[++top]=u;inStack[u]=1;int son=0;for(int i=head[u];~i;i=edge[i].p){int v=edge[i].to;if(vis[i/2]) continue;vis[i/2]=1;if(!dfn[v]){son++;tanjar(v,u);low[u]=min(low[v],low[u]);if(u!=pre&&low[v]>=dfn[u]){cnt++;cut[u]=1;block[u]+=1;}}else low[u]=min(low[u],dfn[v]);}if(u==pre) block[u]=son-1;if(u==pre&&son>1) cut[u]=1,cnt++;inStack[top--]=0;
}
int main()
{int x,y,cas=0;while(scanf("%d",&x),x!=0){scanf("%d",&y);init();add(x,y),add(y,x);while(scanf("%d",&x),x!=0){scanf("%d",&y);add(x,y),add(y,x);}for(int i=1;i<=1000;i++)if(!dfn[i])tanjar(i,i);printf("Network #%d\n",++cas);if(cnt==0) puts("  No SPF nodes");else{for(int i=1;i<=1000;i++)if(cut[i]) printf("  SPF node %d leaves %d subnets\n",i,block[i]);}printf("\n");}return 0;
}

POJ1523 SPF tanjar割点求块数相关推荐

  1. POJ1523:SPF(无向连通图求割点)

    题目:http://poj.org/problem?id=1523 题目解析: 注意题目输入输入,防止PE,题目就是求割点,并问割点将这个连通图分成了几个子图,算是模版题吧. #include < ...

  2. 【POJ - 1523】SPF(Tarjan求割点,求分割成的连通块数,模板题,tricks)

    题干: Consider the two networks shown below. Assuming that data moves around these networks only betwe ...

  3. SPF Tarjan算法求无向图割点(关节点)入门题

    SPF 题目抽象,给出一个连通图的一些边,求关节点.以及每个关节点分出的连通分量的个数 邻接矩阵只要16ms,而邻接表却要32ms,  花费了大量的时间在加边上. //   time  16ms 1 ...

  4. Tarjan算法 (强联通分量 割点 割边)

    变量解释: low 指当前节点在同一强连通分量(或环)能回溯到的dfn最小的节点 dfn 指当前节点是第几个被搜到的节点(时间戳) sta 栈 vis 是否在栈中 ans 指强连通分量的数量 top ...

  5. tarjan缩点与割点

    Tarjan算法 先是废话时间:说来挺惭愧 , 好几个月以前就学过tarjan算法然而现在才第一次写 模板题:[luogu P3387][模板]缩点 tarjan缩点&dp 为啥要缩点答案显然 ...

  6. tarjan算法总结 (强连通分量+缩点+割点),看这一篇就够了~

    文章目录 一.tarjan求强连通分量 1:算法流程 2:模板 二.tarjan缩点 1:相关定义 2:算法流程 三.tarjan求割点.桥 1.什么是割点 2.割点怎么求? 3.割点tarjan模板 ...

  7. 强连通基础与例题(Kosaraju算法与Tarjan算法)

    目录 Kosaraju算法 Tarjan算法 例题 A:HDU-1269 迷宫城堡 B:HDU-2767 Proving Equivalences C:HDU-1827 Summer Holiday ...

  8. 模板记录——赛前准备

    模板大法好 0.STL操作 vector 动态数组 String 字符串类型 stack 栈(先进后出) queue 队列(先进先出,公平原则) set 集合(去重性,有自动排序的功能) map 映射 ...

  9. 图论专题班连通性例题和练习

    2022牛客 图论 连通性(强连通.割点和桥) 文章目录 2022牛客 图论 连通性(强连通.割点和桥) 概念 双连通分量 强连通分量 tarjan 割点 割边(桥) tarjan求割点,桥 点双联通 ...

最新文章

  1. 如何创建一个最小的区块链
  2. redux常见问题答疑
  3. arcgis将点的属性赋值给面
  4. php mysql随机记录_php随机取mysql记录方法小结
  5. 遇到一个因socket未关闭引发的文件句柄用完问题
  6. 注册表把html设置成桌面,[注册表] 将Windows 10默认应用程序设置页面添加到桌面右键菜单中...
  7. Office报错:错误代码:30015-6(-1)
  8. Linux命令学习手册-mount命令
  9. 计算机无法使用光驱启动,电脑怎么设置光驱启动 光驱启动设置教程【图文】...
  10. layui使用tips_layui的tips层怎么用
  11. Unity 2d 机器人的来回巡游
  12. Poser 2014 PRO SR1 资料收集
  13. IO接口以太网低频工业RFID读写器|读取器CK-LR12-E00之Modbus TCP的寄存器定义与说明
  14. 内存检测之KFENCE
  15. java新手案例_java初学者都要掌握的案例
  16. python 打印数组第一行_打印数组中的第一个值而不是只打印第一个字母?(Python)...
  17. 打卡AWS re:Invent 2020 见证技术重塑未来的力量
  18. 若川的2019年度总结,波澜不惊
  19. 粉丝破千了,喊几个机器人跳个舞庆祝下
  20. 计算机二级word历年真题,全国计算机二级office-word-历年真题

热门文章

  1. HarmonyOS Java工程目录结构
  2. android 白天和夜间模式切换时闪屏问题处理方法
  3. CodeForces 375D Tree and Queries
  4. redis 安装启动及设置密码windows
  5. Spring 集成dubbo 找不到dubbo.xsd 文件的问题的想法概述
  6. intel最新的服务器芯片,Intel最新服务器CPU 芯片组Roadmap
  7. C++ 笔记(20)— 异常处理(抛出异常、捕获异常)
  8. PyTorch 笔记(08)— Tensor 比较运算(torch.gt、lt、ge、le、eq、ne、torch.topk、torch.sort、torch.max、torch.min)
  9. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组
  10. 导入drupal中文语言包