POJ 1144 - Network 用tarjan求无向图的割点
2013-10-25 20:26
423 查看
题意:
给了一个无向图..问有多少个割点...
题解:
发现tarjan这一块还有一个地方没搞~~补上...
用tarjan找双联通分量...若有条边其起点的dfn不大于终点的low ..那么起点"可能"是割点...之所以说可能是因为每次dfs的第一个点必定会多一次dfn大于low的边...所以每次进入了dfs回来后要将起点的记录值-1..若其还是大于0的才说明该点是割点...
Program:
给了一个无向图..问有多少个割点...
题解:
发现tarjan这一块还有一个地方没搞~~补上...
用tarjan找双联通分量...若有条边其起点的dfn不大于终点的low ..那么起点"可能"是割点...之所以说可能是因为每次dfs的第一个点必定会多一次dfn大于low的边...所以每次进入了dfs回来后要将起点的记录值-1..若其还是大于0的才说明该点是割点...
Program:
#include<iostream> #include<stdio.h> #include<string.h> #include<set> #include <stack> #include<queue> #include<algorithm> #include<cmath> #define oo 1000000007 #define ll long long #define pi acos(-1.0) #define MAXN 205 #define MAXM 50505 using namespace std; struct node { int v,id,next; }edge[MAXM]; int Ne,_next[MAXN],P[MAXN],dfn[MAXN],low[MAXN],DfsIndex; void addedge(int u,int v,int id) { edge[++Ne].next=_next[u],_next[u]=Ne; edge[Ne].v=v,edge[Ne].id=id; } void tarjan(int u,int id) { dfn[u]=low[u]=++DfsIndex; for (int k=_next[u];k;k=edge[k].next) if (edge[k].id!=id) { int v=edge[k].v; if (!dfn[v]) { tarjan(v,edge[k].id); low[u]=min(low[u],low[v]); if (dfn[u]<=low[v]) P[u]++; }else low[u]=min(low[u],dfn[v]); } } int main() { int n,u,v,id,ans; char c; while (~scanf("%d",&n) && n) { Ne=id=0,memset(_next,0,sizeof(_next)); while (~scanf("%d",&u) && u) while (scanf("%c",&c) && c!='\n') scanf("%d",&v),addedge(u,v,++id),addedge(v,u,id); memset(P,0,sizeof(P)); memset(dfn,0,sizeof(dfn)); DfsIndex=0; for (u=1;u<=n;u++) if (!dfn[u]) { tarjan(u,0); P[u]--; } ans=0; for (u=1;u<=n;u++) ans+=!(!P[u]); printf("%d\n",ans); } return 0; }
相关文章推荐
- iOS开发个人独立博客收集
- 练习1-20:请编写程序detab,将输入中的制表符替换成适当数目的空格,适空格充满到下一个制表符中止的地方。假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。n应该作为变量还是符号常量呢?
- 文本切换器(TextSwitcher)的功能和用法
- vmware虚拟机工具vmware tools介绍及安装排错
- struts2 中chain、redirect、redirectaction的区别
- 如何在word中使代码高亮
- 静态类 内部 用法 作用
- nginx常用配置项位置参数宏说明
- Android控件拖动的实现
- Python 学习入门(0)—— 简明教程
- C语言冒泡排序
- 阿里云开发者大会
- poj 2074
- 猴子选大王问题
- atl
- java项目打包成exe文件
- 近期C程序小结
- Cocos2d-x入门:单例模式运用
- linux下C 线程池的原理讲解和代码实现(能自行伸缩扩展线程数)
- cocos2d-x之节点类CCNode