hrbust 1494 tarjan算法求割点模版
来源:互联网 发布:淘宝吉他店铺推荐 编辑:程序博客网 时间:2024/06/05 15:36
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;struct arc{ int to,val; int next; arc(int a=-1,int b=0):to(a),val(b) {}};int head[150];arc edge[40000];int e_cnt=0;int low[150];int dfn[150];int cnt;int rootnum; //深度优先树根的边树int root; //深度优先树根节点int n;bool ans[150]; //记录割点inline void addedge(int a,int b){ edge[e_cnt].to=b; edge[e_cnt].next=head[a]; head[a]=e_cnt; e_cnt++;}void dfs(int from,int x){ low[x]=dfn[x]=++cnt; int v; for(int i=head[x];i!=-1;i=edge[i].next) { v=edge[i].to; if(!dfn[v]) { if(x==root) rootnum++; dfs(x,v); low[x]=min(low[v],low[x]); if(low[v]>=dfn[x]) ans[x]=1; //存在一个子节点的最小可达深度优先数小于父节点的深度优先数 则为割点 } else if(v!=from) low[x]=min(dfn[v],low[x]); } return;}void tarjan(){ rootnum=cnt=0; memset(dfn,0,sizeof(dfn)); memset(ans,0,sizeof(ans)); dfs(-1,root); return;}int main(){ char str[500]; while(~scanf("%d",&n)&&n) { getchar(); e_cnt=0; memset(head,-1,sizeof(head)); while(gets(str)&&str[0]!='0') { int len=strlen(str); int k; int from; root=from=atoi(str); for(k=0;str[k]!=' ';k++) {continue;} while(k<len) { if(str[k]==' ') {k++; continue;} int to=atoi(str+k); addedge(from,to); addedge(to,from); for(;str[k]!=' '&&str[k];k++) continue; } } tarjan(); //从from开始进行tarjan算法的dfs// for(int i=1;i<=n;i++)// {// cout<<i<<':'<<' ';// for(int j=head[i];j!=-1;j=edge[j].next)// {// cout<<edge[j].to<<" ";// }// cout<<endl;// } int res=0; for(int i=1;i<=n;i++) if(ans[i]&&i!=root) res++; if(rootnum>=2) res++; //根节点如果边树大于2 则为割点// for(int i=1;i<=n;i++)// {// printf("%d: low=%d dfn=%d\n",i,low[i],dfn[i]);// } printf("%d\n",res); } return 0;}
0 0
- hrbust 1494 tarjan算法求割点模版
- [LCA] tarjan算法 模版
- HDU tarjan算法模版 强连通分量+最小路径覆盖
- network tarjan算法求割点
- tarjan算法求割点
- hrbust 1161 树状数组模版
- 强连通tarjan模版
- 超级模版系列----tarjan
- 强连通tarjan模版
- poj1236 tarjan 模版题
- tarjan缩点建图以及双联通求割点,桥模版
- [poj1523 SPF]tarjan算法求割点
- 有向图的强联通分量Tarjan算法模版(hdu1269)
- HDU 1269 迷宫城堡 (裸的Tarjan算法求强连通分量, 可作模版)
- tarjan算法
- Tarjan算法
- tarjan算法
- Tarjan算法
- 【日常学习】【欧拉函数】codevs2296 仪仗队题解
- 撤销myeclipse误删的文件,更改应用名
- WebService到底是什么?
- Gradle学习系列之八——构建多个Project
- taskAffinity属性
- hrbust 1494 tarjan算法求割点模版
- Unable to find a java Virtual Machine ---- Oracle Developer
- oracle与excel 异曲同工之妙
- base 64 编解码
- Gradle学习系列之九——自定义Task类型
- <数据结构学习与实验指导>3-3银行业务队列模拟/3-4一元多项式的乘法与加法运算
- 持续部署,并不简单!
- 读取so文件信息工具——readelf
- Android笔记三十四.Service综合实例二