hihoCoder1183 tarjan算法应用之割边和割点
来源:互联网 发布:人工智能社区 编辑:程序博客网 时间:2024/05/21 06:24
#include<cstdio>#include<vector>#include<algorithm>using namespace std;int n,m,order=0;int low[20004],dfn[20004],father[20004],son[20004];//father:父结点 son:子结点个数 vector<int> cutpoint,edge[20004];vector< pair<int,int> > cutedge;void tarjan(int u){dfn[u]=low[u]=++order;bool flag=false;for (int i=0;i<edge[u].size();i++){int v=edge[u][i];if(!dfn[v]){son[u]++;father[v]=u; tarjan(v);if(low[v]>=dfn[u]) flag=true;//点u为割点 if(low[v]>dfn[u]) cutedge.push_back(make_pair(min(v,u),max(v,u)));//边v-u为割边 low[u]=min(low[u],low[v]);}else if(v!=father[u]) low[u]=min(low[u],dfn[v]);}//根节点若有两棵或两棵以上的子树则该为割点//非根节点若所有子树节点均没有指向u的祖先节点的回边则为割点if((father[u]==0&&son[u]>1)||(father[u]&&flag)) cutpoint.push_back(u);}int main(){scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);edge[u].push_back(v),edge[v].push_back(u);}tarjan(1);sort(cutedge.begin(),cutedge.end());sort(cutpoint.begin(),cutpoint.end());if(0==cutpoint.size()) puts("Null");else{printf("%d",cutpoint[0]);for (int i=1;i<cutpoint.size();i++) printf(" %d",cutpoint[i]);puts("");}for(int i=0;i<cutedge.size();i++) printf("%d %d\n",cutedge[i].first,cutedge[i].second);}
阅读全文
0 0
- hihoCoder1183 tarjan算法应用之割边和割点
- tarjan算法应用之割边和割点
- tarjan求割顶和桥 hihoCoder1183 连通性一·割边与割点
- tarjan算法之 割边,割点
- 割点和桥---Tarjan算法
- Tarjan算法求桥和割点
- 关于tarjan算法的一些理解(割边和割点)
- tarjan算法应用 割点 桥 双连通分量
- tarjan算法应用 割点 桥 双连通分量
- tarjan算法应用 割点 桥 双连通分量
- 割点和割边
- 割点和割边
- 求桥和割点的Tarjan算法
- Poj 1523 SPF(割点 + tarjan算法)
- tarjan最小割点算法模板
- poj2117 tarjan()+割点
- 【tarjan】【割点】
- tarjan 割点
- [PAT-甲级]1015.Reversible Primes
- CDH HiveServer2异常退出
- 好的用户界面-界面设计的一些技巧
- [PAT-甲级]1016.Phone Bills
- com/genuitec/pulse2/client/targetcfg/ui/PulseActivator
- hihoCoder1183 tarjan算法应用之割边和割点
- 表单提交后关闭页面(layer弹窗)
- [PAT-甲级]1017.Queueing at Bank
- android自定义控件(一)
- Python 实现一个小判断的程序
- 0710编程之美二进制树中1的个数 三种解法
- [PAT-甲级]1019.General Palindromic Number
- Mybatis 源码解析 -插件模块
- Golang教程:(九)循环语句