【模板】割点(割顶)
题目背景
割点
题目描述
给出一个n个点,m条边的无向图,求图的割点。
输入输出格式
输入格式:
第一行输入n,m
下面m行每行输入x,y表示x到y有一条边
输出格式:
第一行输出割点个数
第二行按照节点编号从小到大输出节点,用空格隔开
输入输出样例
6 7 1 2 1 3 1 4 2 5 3 5 4 5 5 6
1 5
说明
n,m均为100000
tarjan 图不一定联通!!!
思路
dfs求割点;
在DFS搜索树,我们可以发现有两类节点可以成为割点:
- 对根节点u,若其有两棵或两棵以上的子树,则该根结点u为割点;
- 对非叶子节点u(非根节点),若其子树的节点均没有指向u的祖先节点的回边,说明删除u之后,根结点与u的子树的节点不再连通;则节点u为割点。
2即n->v边中low[v]>=dfn[u];
代码实现
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=3e5; 5 inline int min_(int x,int y){return x<y?x:y;} 6 int n,m; 7 int a,b; 8 int h[maxn],hs,et[maxn],en[maxn]; 9 void add(int u,int v){ 10 ++hs,et[hs]=v,en[hs]=h[u],h[u]=hs; 11 ++hs,et[hs]=u,en[hs]=h[v],h[v]=hs; 12 } 13 int s[maxn],ss; 14 int dfn[maxn],dfns,low[maxn],v[maxn]; 15 void tarjan(int k,int f){ 16 dfn[k]=low[k]=++dfns; 17 for(int i=h[k];i;i=en[i]) 18 if(et[i]!=f){ 19 if(dfn[et[i]]){ 20 low[k]=min_(low[k],dfn[et[i]]); 21 } 22 else{ 23 tarjan(et[i],k); 24 low[k]=min_(low[k],low[et[i]]); 25 if(low[et[i]]>=dfn[k]) ++v[k]; 26 } 27 } 28 if(f&&v[k]) s[++ss]=k; 29 if(!f&&v[k]>1) s[++ss]=k; 30 } 31 int main(){ 32 scanf("%d%d",&n,&m); 33 for(int i=1;i<=m;i++){ 34 scanf("%d%d",&a,&b); 35 add(a,b); 36 } 37 for(int i=1;i<=n;i++){ 38 if(!dfn[i]){ 39 dfns=0; 40 tarjan(i,0); 41 } 42 } 43 sort(s+1,s+ss+1); 44 printf("%d\n",ss); 45 for(int i=1;i<=ss;i++) printf("%d ",s[i]); 46 putchar('\n'); 47 return 0; 48 }
感谢;
http://www.cnblogs.com/en-heng/p/4002658.html
助我一A;
转载于:https://www.cnblogs.com/J-william/p/7044352.html
【模板】割点(割顶)相关推荐
- 洛谷 P3388 【模板】割点(割顶) 根+非根+dfn[]+low[]+不一样的Tarjan算法
洛谷 P3388 [模板]割点(割顶) 根+非根+dfn[]+low[]+不一样的Tarjan算法 Tarjan算法,详见https://blog.csdn.net/mrcrack/article ...
- P3388 【模板】割点(割顶) 题解
博客园同步 原题链接 简要题意: 给定一个图,求所有割点. 割点(割顶)的定义:去掉该点整个图不连通. 前置知识: 强连通分量的 Tarjan \texttt{Tarjan} Tarjan 求法. 不 ...
- UVA 315 :Network (无向图求割顶)
题目链接 题意:求所给无向图中一共有多少个割顶 用的lrj训练指南P314的模板 #include<bits/stdc++.h> using namespace std; typedef ...
- 无向图的割顶、桥、BCC和eBCC相关
几个例题代码待填 割顶:若去掉一个点和与这个点相连的边后,图不再连通,则这个点是割顶. 求法:若节点\(u\)存在一棵子树\(v\)满足\(v\)中所有节点的回边都指向\(u\)及以下的节点(即\ ...
- 【BZOJ1123】[POI2008]BLO【割顶】
[题目链接] 题意可见discuss. 用Tarjan求割顶,然后对割顶的所有子树求点对个数(前缀和扫一遍),最后把自身和其他点的答案加上. 没注意边,数组开小了. /* Pigonometry */ ...
- 洛谷P3388 【模板】割点(割顶)
/*表示割点模板很难理解.... 但是呢,可以将整个图用深搜来一步步递归.. dfn[x]<=low[tmp] && x!=mr的点就++: 完毕.... PS:小心第一个节点. ...
- 【模板】 割点(割顶)
神马网站的链接都可以啊~~~~ 模板题,无程序说明 Code: #include<bits/stdc++.h> #define rep(i,j,k) for(int i=j;i<=k ...
- P3388-[模板]割点(割顶)【tarjan】
正题 题目大意 求所有割点 解题思路 跑tarjantarjantarjan,然后判断dfnx≤lowydfn_x\leq low_ydfnx≤lowy codecodecode #include ...
- 洛谷.4897.[模板]最小割树(Dinic)
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...
最新文章
- Powershell管理系列(五)修改AD账号属性
- 怎么把视频里的音乐提取出来
- 这样设置ae导出文件的时候m1还是能顶得住的,3分钟的事情渲染一个开场
- mysql怎么实现事务序列化_一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
- 基于React开发范式的思考:写在Lesx发布之际
- 【转】职业生涯30年的规划(经典)
- mysql数据库事务的概念_如何理解数据库事务中的一致性的概念?
- python实现的 AWGN信道下QPSK调制信号的平均相位估计
- Java进制转换工具类
- Visio 下载,及密钥
- 在unity中,模型自动旋转
- 网页版在线使用PS网站源码
- ssm基于jsp的在线点餐系统 毕业设计源码111016
- 行业内参:2019年支付监管框架将有大调整 线上线下牌照合并重划
- 前端sku-spu详解
- 经济订货批量(EOQ)模型及有计划的延期交货_库存管理基础
- 彩虹六号mute影响服务器笑话,有哪些《彩虹六号》玩家才懂的笑话?
- d3.js:取代d3.mouse的d3.pointer
- 练习4-6 猜数字游戏 (15分) 代码比较长,新手上路请多关照
- AE基础教程第一阶段——01影视后期专业导论
热门文章
- 在Makefile中的 .PHONY 是做什么的?
- java 计算两个日期之间的天数_Java日期时间API系列22-----Jdk8Month月份和DayOfWeek星期的计算。...
- 亿条数据读取工具_仅需1秒!搞定100万行数据:超强Python数据分析利器
- Redhat安装gtk2.0和pkg-config
- Sublime Text 2
- JQuery 匿名函数初识(转载)
- linux 下查看log实时输出
- OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字
- 资源推荐 | TensorFlow电子书《FIRST CONTACT WITH TENSORFLOW》
- Qt paintevent事件