博客
关于我
割点和图(割边)
阅读量:279 次
发布时间:2019-03-03

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

割点: 在连通的无向图中,删除一个点和与它所相连的边,无向图不再连通,说明这个点是割点。

思路: 从一个点开始深搜,当这个点不经过他的父亲节点不能返回到比这个父节点更早的时间戳,说明这个点的父节点是割点。
low[v]>=dfn[u]
注意: 判断割点时分两种情况,如果父节点是根节点的话,至少两个儿子才能形成割点!
割边就是去掉一条边使这个图不连通。
low[v]>dfn[u];不能经过u->v这条边,所以不能等于low[u] (可以用三角形举例)

/*POJ - 1144 求割点数目*/#include
#include
#include
using namespace std;vector
edge[110];int cnt;int dfn[110],low[110],root,flag[111];/*考虑图不连通?*/void Tarjan(int u,int fa){ int child=0; dfn[u]=low[u]=++cnt; for(int i=0; i
=dfn[u]&&u!=root)/*!!!大于等于*/ { flag[u]=1;/*儿子回到的最早时间戳大于等于x,x不是根节点*/ } else if(u==root&&child>=2) { /*根节点,至少两个儿子*/ flag[u]=1; } } else if(u!=v)/*!!! v点走过*/ { low[u]=min(low[u],dfn[v]); } } return ;}int main(){ int n; while(~scanf("%d",&n)&&n) { int m,t; char c; root=1; cnt=0; for(int i=0; i<=n; i++) { edge[i].clear(); dfn[i]=0; low[i]=0; flag[i]=0; } while(~scanf("%d",&m)&&m) { while(1) { scanf("%c",&c); if(c=='\n') break; scanf("%d",&t); edge[m].push_back(t); edge[t].push_back(m); // printf("%d <---> %d\n",t,m); } } Tarjan(1,1); int sum=0; for(int i=1; i<=n; i++) if(flag[i]) sum++; printf("%d\n",sum); } return 0;}
/*割边*/#include
using namespace std;#define N 1000int n,m,first[N],nex[N],w=1,dfn[N],low[N],flag[N],u[N],v[N],root,index;void Tarjan(int x,int father){ int child=0; index++;/*计算时间戳*/ dfn[x]=low[x]=index; for(int i=first[x];i!=-1;i=nex[i]) { int y=v[i];/* x->y */ if(!dfn[y])/*没有被访问过*/ { Tarjan(y,x); low[x]=min(low[x],low[y]); if(low[y]>dfn[x])/*这条边是不是割边*/ printf("%d %d\n",x,y); } else if(x!=father)/*不通过父节点访问*/ low[x]=min(low[y],dfn[x]);/*在割点中不一样low的值不对*/ } return;}int main(){ index=0; int y,x; scanf("%d%d",&n,&m); memset(flag,0,sizeof(flag)); memset(first,-1,sizeof(first)); for(int i=0;i

转载地址:http://smsl.baihongyu.com/

你可能感兴趣的文章
什么是网络基础设施?
查看>>
如何加载dll文件计算UDS服务的秘钥
查看>>
IP代理给模拟器多开和虚拟机多开提供了哪些帮助?
查看>>
细数哪些网络用户需要换IP?
查看>>
“山东大学移动互联网开发技术教学网站建设”项目实训日志一
查看>>
codeforces1307D 1900分最短路
查看>>
codeforces803F 2100分容斥原理 + 莫比乌斯函数
查看>>
2020牛客暑期多校训练营(第七场) 待补题
查看>>
2020牛客暑期多校训练营(第九场)
查看>>
The 2016 ACM-ICPC Asia Dalian Regional Contest 部分题解
查看>>
8皇后问题 递归 函数调用是重点
查看>>
1541 +1 *2 ²
查看>>
老鼠走迷宫
查看>>
跳马 (和小老鼠走迷宫差不多)
查看>>
ural 1627 生成树计数模板题 基尔霍夫矩阵树定理 + 行列式计算模板
查看>>
cf 977e 思维 + dfs
查看>>
面试别慌!阿里专家带你从【入门+基础+进阶+项目】攻破SpringBoot
查看>>
【Java面试】30个 Java 集合面试必备的问题和答案
查看>>
干了八年的阿里面试官,给大家分享我面试时最爱问的Java面试题
查看>>
华为鸿蒙到底是不是安卓系统套了个壳?
查看>>