博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[无向图割点] PKU 1523 SPF
阅读量:5067 次
发布时间:2019-06-12

本文共 1703 字,大约阅读时间需要 5 分钟。

targan算法。

1 # include 
2 # include
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
= dfn[u])26 {27 if (u != r) ++subnets[u];28 else ++son;29 }30 }31 else32 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 do73 {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

你可能感兴趣的文章
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>
__all__有趣的属性
查看>>
写博客
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
ios封装静态库技巧两则
查看>>
Educational Codeforces Round 46 (Rated for Div. 2)
查看>>
Abstract Factory Pattern
查看>>
C# 实现Bresenham算法(vs2010)
查看>>
基于iSCSI的SQL Server 2012群集测试(一)--SQL群集安装
查看>>
list 容器 排序函数.xml
查看>>
Activity启动过程中获取组件宽高的五种方式
查看>>
java导出Excel表格简单的方法
查看>>
SQLite数据库简介
查看>>
利用堆实现堆排序&amp;优先队列
查看>>