[无向图割点] PKU 1523 SPF
targan算法。
1 # include <cstdio> 2 # include <cstring> 3 4 # define N (1000 + 5) 5 6 int n, son, tmpdfn; 7 int low[N], dfn[N], subnets[N]; 8 char g[N][N]; 9 10 int Min(int x, int y) 11 { 12 return x<y ? x:y; 13 } 14 15 void tarjan(int u, int r) 16 { 17 dfn[u] = low[u] = ++tmpdfn; 18 for (int v = 1; v <= n; ++v) if (g[u][v]) 19 { 20 if (!dfn[v]) 21 { 22 //dfn[v] = low[v] = ++tmpdfn; // 时间戳打在这里就忽略了节点r,原图可能是不联通的(这道题是联通的) 23 tarjan(v, r); 24 low[u] = Min(low[u], low[v]); 25 if (low[v] >= dfn[u]) 26 { 27 if (u != r) ++subnets[u]; 28 else ++son; 29 } 30 } 31 else 32 low[u] = Min(low[u], dfn[v]); 33 } 34 } 35 36 void init(void) 37 { 38 tmpdfn = 0; 39 memset(low+1, 0, sizeof(int)*n); 40 memset(dfn+1, 0, sizeof(int)*n); 41 memset(subnets+1, 0, sizeof(int)*n); 42 } 43 44 void solve(void) 45 { 46 bool find = false; 47 for (int i = 1; i <= n; ++i) if (!dfn[i]) 48 { 49 son = 0; 50 tarjan(i, i); 51 if (son > 1) subnets[i] = son - 1; 52 } 53 for (int i = 1; i <= n; ++i) 54 { 55 if (subnets[i]) 56 { 57 find = true; 58 printf("\n SPF node %d leaves %d subnets", i, subnets[i]+1); 59 } 60 } 61 if (find == false) 62 printf("\n No SPF nodes"); 63 } 64 65 int read_graph(void) 66 { 67 n = 0; 68 memset(g, 0, sizeof(g)); 69 int x, y; 70 scanf("%d", &x); 71 if (x == 0) return 0; 72 do 73 { 74 scanf("%d", &y); 75 g[x][y] = g[y][x] = 1; 76 if (x > n) n = x; 77 if (y > n) n = y; 78 }while (scanf("%d", &x), x); 79 return 1; 80 } 81 82 int main() 83 { 84 int icase = 0; 85 while (read_graph()) 86 { 87 if (icase != 0) printf("\n\n"); 88 printf("Network #%d", ++icase); 89 init(); 90 solve(); 91 } 92 }
注意n=1的情况。
转载于:https://www.cnblogs.com/JMDWQ/archive/2012/08/07/2626705.html
[无向图割点] PKU 1523 SPF相关推荐
- poj 1523 SPF (无向图 的 割点)
http://poj.org/problem?id=1523 题意: 求 无向图的 个点,以及 将个点 去掉后 图 被分成 几个联通块: 题解: tarjan . 1 #include ...
- POJ 1523 SPF 割点与桥的推断算法-Tarjan
题目链接: POJ1523 题意: 问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分 题解: Tarjan 算法模板题 顺序遍历整个图,能够得到一棵生成树: 树边:可理解为在DFS过 ...
- POJ 1523 SPF (割点 点双连通分量)
题意:求出割点以及除去割点后的连通分量的数量(附带求出了点双连通分量(块)) [求割点]对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号.定义Low(u)为u或u的子树 ...
- SPF Tarjan算法求无向图割点(关节点)入门题
SPF 题目抽象,给出一个连通图的一些边,求关节点.以及每个关节点分出的连通分量的个数 邻接矩阵只要16ms,而邻接表却要32ms, 花费了大量的时间在加边上. // time 16ms 1 ...
- poj 2942 圆桌骑士 无向图割点 奇圈 交叉染色
连通类经典题 题意及分析参考: 1.建反向图 2.tarjan 算法求割点3.二部图与奇圈 4.交叉染色 http://blog.csdn.net/lyy289065406/article/detai ...
- POJ 1523 SPF
大意:求割顶的数量以及删除割顶之后子图的数量. 思路:Tarjan算法求割顶,同POJ 1144 NetWork. CODE1: #include<cstdio> #include< ...
- BZOJ_P1123 [POI2008]BLO(无向图割点)
BZOJ传送门 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 810 Solved: 344 [Submit][Status][Discuss] De ...
- DFS应用——找出无向图的割点
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "DFS应用于找割点" 的idea 并用源代码加以实现: 0.2) 必须要事先 做个s ...
- 第1节 连通性强连通、割点和桥(一)
文章目录 无向图割点.桥.双连通分量 Tarjan算法求割点和桥(割边) 代码: 边双连通分量 和 点双连通分量 代码 边双连通分量 和 点双连通分量 的缩点 有向图的弱连通与强连通 强连通分量 Ko ...
最新文章
- ASP.NET Core的配置(5):配置的同步[设计篇]
- hdu 4417 Super Mario(可持久化线段树)
- Kali Linux安全渗透教程(内部资料)
- linux mysql5.7.11安装_centos 7 安装mysql 5.7.11
- 斯坦福机器学习视频笔记 Week6 关于机器学习的建议 Advice for Applying Machine Learning...
- bash的简单for循环
- 代码整洁之道(Clean Code)- 读书笔记
- LeetCode 2157. 字符串分组(状态压缩+位运算+图的遍历)
- Oracle plsqlI 练习 传值
- 因代码不规范,码农枪击了4名同事!
- cnn 示意图_Two-Stream CNN(双流CNN)介绍(NIPS2014)
- Unity3D基础36:场景自适应与场景切换
- printk打印机别
- python绘制缓和曲线_CAD中如何绘制缓和曲线
- 红山区智慧城管系统正式上线运行
- 关于对ffmpeg中SAR/DAR/PAR的理解
- Linux监控程序运行/停止+邮件通知
- Google三驾马车——GFS、MapReduce、Bigtable
- 怎样购买笔记本电脑-世界十大品牌
- div布局系列 - 两端对齐的方法
热门文章
- Cosmos OpenSSD--greedy_ftl1.2.0(一)
- IOS时间与日期处理
- 在centos7中安装MySQL5.7
- 网站的domain不在首页的原因
- laravel5.4 关于select下拉框读取数据库数据案例
- [链接]开方检验原理
- JAVA 面向对象-2-继承(Inheritance)
- 学习strut时遇到的问题 - Unable to compile class for JSP 错误的解决过程。
- vmware智能资源调整
- Is this a MS EnterLib DAAB BUG or not?