POJ1523 SPF tanjar割点求块数
题目链接
这道题求把点割了之后分的块数,在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割点求块数相关推荐
- POJ1523:SPF(无向连通图求割点)
题目:http://poj.org/problem?id=1523 题目解析: 注意题目输入输入,防止PE,题目就是求割点,并问割点将这个连通图分成了几个子图,算是模版题吧. #include < ...
- 【POJ - 1523】SPF(Tarjan求割点,求分割成的连通块数,模板题,tricks)
题干: Consider the two networks shown below. Assuming that data moves around these networks only betwe ...
- SPF Tarjan算法求无向图割点(关节点)入门题
SPF 题目抽象,给出一个连通图的一些边,求关节点.以及每个关节点分出的连通分量的个数 邻接矩阵只要16ms,而邻接表却要32ms, 花费了大量的时间在加边上. // time 16ms 1 ...
- Tarjan算法 (强联通分量 割点 割边)
变量解释: low 指当前节点在同一强连通分量(或环)能回溯到的dfn最小的节点 dfn 指当前节点是第几个被搜到的节点(时间戳) sta 栈 vis 是否在栈中 ans 指强连通分量的数量 top ...
- tarjan缩点与割点
Tarjan算法 先是废话时间:说来挺惭愧 , 好几个月以前就学过tarjan算法然而现在才第一次写 模板题:[luogu P3387][模板]缩点 tarjan缩点&dp 为啥要缩点答案显然 ...
- tarjan算法总结 (强连通分量+缩点+割点),看这一篇就够了~
文章目录 一.tarjan求强连通分量 1:算法流程 2:模板 二.tarjan缩点 1:相关定义 2:算法流程 三.tarjan求割点.桥 1.什么是割点 2.割点怎么求? 3.割点tarjan模板 ...
- 强连通基础与例题(Kosaraju算法与Tarjan算法)
目录 Kosaraju算法 Tarjan算法 例题 A:HDU-1269 迷宫城堡 B:HDU-2767 Proving Equivalences C:HDU-1827 Summer Holiday ...
- 模板记录——赛前准备
模板大法好 0.STL操作 vector 动态数组 String 字符串类型 stack 栈(先进后出) queue 队列(先进先出,公平原则) set 集合(去重性,有自动排序的功能) map 映射 ...
- 图论专题班连通性例题和练习
2022牛客 图论 连通性(强连通.割点和桥) 文章目录 2022牛客 图论 连通性(强连通.割点和桥) 概念 双连通分量 强连通分量 tarjan 割点 割边(桥) tarjan求割点,桥 点双联通 ...
最新文章
- 如何创建一个最小的区块链
- redux常见问题答疑
- arcgis将点的属性赋值给面
- php mysql随机记录_php随机取mysql记录方法小结
- 遇到一个因socket未关闭引发的文件句柄用完问题
- 注册表把html设置成桌面,[注册表] 将Windows 10默认应用程序设置页面添加到桌面右键菜单中...
- Office报错:错误代码:30015-6(-1)
- Linux命令学习手册-mount命令
- 计算机无法使用光驱启动,电脑怎么设置光驱启动 光驱启动设置教程【图文】...
- layui使用tips_layui的tips层怎么用
- Unity 2d 机器人的来回巡游
- Poser 2014 PRO SR1 资料收集
- IO接口以太网低频工业RFID读写器|读取器CK-LR12-E00之Modbus TCP的寄存器定义与说明
- 内存检测之KFENCE
- java新手案例_java初学者都要掌握的案例
- python 打印数组第一行_打印数组中的第一个值而不是只打印第一个字母?(Python)...
- 打卡AWS re:Invent 2020 见证技术重塑未来的力量
- 若川的2019年度总结,波澜不惊
- 粉丝破千了,喊几个机器人跳个舞庆祝下
- 计算机二级word历年真题,全国计算机二级office-word-历年真题
热门文章
- HarmonyOS Java工程目录结构
- android 白天和夜间模式切换时闪屏问题处理方法
- CodeForces 375D Tree and Queries
- redis 安装启动及设置密码windows
- Spring 集成dubbo 找不到dubbo.xsd 文件的问题的想法概述
- intel最新的服务器芯片,Intel最新服务器CPU 芯片组Roadmap
- C++ 笔记(20)— 异常处理(抛出异常、捕获异常)
- PyTorch 笔记(08)— Tensor 比较运算(torch.gt、lt、ge、le、eq、ne、torch.topk、torch.sort、torch.max、torch.min)
- Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组
- 导入drupal中文语言包