poj1144 求割点的个数
2016-05-06 21:46
295 查看
题目链接:http://poj.org/problem?id=1144
学习资料:https://www.byvoid.com/blog/biconnect
求割点,模板题
学习资料:https://www.byvoid.com/blog/biconnect
求割点,模板题
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <stack> using namespace std; const int M = 1009; int n,m; int dfn[M],low[M]; int dfs_clock; bool iscut[M]; vector<int> G[M]; void init() { dfs_clock = 0; for(int i = 0;i <= 2*n;i++) G[i].clear(); memset(dfn,0,sizeof(dfn)); memset(iscut,false,sizeof(iscut)); } int dfs(int u,int fa) { int lowu = dfn[u] = ++dfs_clock; int child = 0; for(int i = 0;i < G[u].size();i++) { int v = G[u][i]; if(!dfn[v]) { child++; int lowv = dfs(v,u); lowu = min(lowu,lowv); if(lowv >= dfn[u]) iscut[u] = true; } else if(dfn[v] < dfn[u] && v != fa) { lowu = min(lowu,dfn[v]); } } if(fa < 0 && child == 1) iscut[u] = false; low[u] = lowu; return lowu; } int main() { while(scanf("%d",&n) == 1 && n) { int a; init(); while(scanf("%d",&a) == 1 && a) { while(getchar() != '\n') { int b; scanf("%d",&b); G[a].push_back(b); G[b].push_back(a); } } dfs(1,-1); int ans = 0; for(int i = 1;i <= n;i++) { if(iscut[i]) ans++; } printf("%d\n",ans); } return 0; }
相关文章推荐
- (转)天气预报接口api(中国天气网)
- 修改Widnows 10 显示自定义缩放级别为500%还原
- 斐波那契数列的非递归c语言实现以及斐波那契数列的应用
- [USACO1.5]回文质数 Prime Palindromes
- Problem E: ASCII码排序
- mysql 多表查询
- PAT-B 1036. 跟奥巴马一起编程
- 第10周阅读程序2
- 实拍验证 双色温闪光灯真能校正白平衡?
- python小白-day15 web框架
- 2016.5.1学习与找工作
- MapReduce之 WordCount 源码分析和操作流程
- strace 输出长字符串
- LTE物理传输资源(2)-频带、信道带宽和频点号EARFCN
- 关于近期工作的几个反思
- HDU5678 dfs序 + 主席树
- JAVA的堆实现: PriorityQueue
- 在Centos7上安装Percona 5.7
- Metal 着色语言编程指南 十五
- iPhone、iPad各类问题请评论本bo