博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA-315 无向图求割点个数
阅读量:4314 次
发布时间:2019-06-06

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

题意抽象:

给定一个无向图,输出割点个数。

割点定义:删除该点后,原图变为多个连通块。

 

考虑一下怎么利用tarjan判定割点:

对于点u和他相连的当时还未搜到的点v,dfs后如果DFN[u]<=low[v],那么u是割点。(搜v得到的是一个不会倒卷回来的子图)

另外注意一下tarjan搜索时的起始点如果有多个儿子那么它也是割点。

AC代码:

#include
#include
#define rep(i,a,b) for(int i=a;i<=b;++i)using namespace std;const int MAXN=110;const int MAXM=110*110;int tot=0;int pointer[MAXN],DFN[MAXN],low[MAXN];bool instack[MAXN];int Stap[MAXN];int Stop,cnt=0,n;int par[MAXN];bool iscut[MAXN];int add_block[MAXN];struct Edge{ int to,next,vis; Edge() {} Edge(int b,int nxt,int visit) {to=b;next=nxt,vis=visit;}}edge[MAXM];inline void addedge(int a,int b){ edge[tot]=Edge(b,pointer[a],0); pointer[a]=tot++; edge[tot]=Edge(a,pointer[b],0); pointer[b]=tot++;}void init(){ memset(pointer,-1,sizeof(pointer)); memset(par,-1,sizeof(par)); memset(iscut,0,sizeof(iscut)); memset(DFN,0,sizeof(DFN)); memset(add_block,0,sizeof(add_block)); tot=0;cnt=0; int k,u;char c; while(scanf("%d",&u)&&u) { while(scanf("%d%c",&k,&c)&&k) { addedge(u,k); if(c=='\n') break; } }}void tarjan(int u,int pre){ int son=0; DFN[u]=low[u]=++cnt; for(int j=pointer[u];j!=-1;j=edge[j].next) { int v=edge[j].to; if(edge[j].vis) continue; edge[j].vis=1; edge[j^1].vis=1; if(!DFN[v]) { son++; par[v]=j; tarjan(v,u); if(low[v]
1) iscut[u]=1; if(u==pre) add_block[u]=son-1;}int main(){ //freopen("in.txt","r",stdin); while(scanf("%d",&n)&&n) { init(); rep(i,1,n) if(!DFN[i]) tarjan(i,i); int ans=0; rep(i,1,n) if(iscut[i]) ans++; printf("%d\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/zhixingr/p/7822469.html

你可能感兴趣的文章
整体二分&cdq分治 ZOJ 2112 Dynamic Rankings
查看>>
【POJ2976】Dropping tests (01分数规划入门题)
查看>>
通过正则表达式获取url中参数
查看>>
86.运算符重载
查看>>
cxx signal信号捕获
查看>>
《Android开发艺术探索》读书笔记——Cha3.2.3改变布局参数实现View的滑动
查看>>
python闭包与装饰器
查看>>
Acegi 源码解释
查看>>
Activity的几种启动跳转方式
查看>>
LCA最近公共祖先Tarjan(离线)
查看>>
牛客练习赛16 E求值
查看>>
matlab rank
查看>>
Asp.net系列--基础篇(三)
查看>>
css基础
查看>>
如何在tomcat中如何部署java EE项目
查看>>
【Python基础教程第2版】——第二讲:列表和元组
查看>>
小常识
查看>>
使用vscode开发python
查看>>
《java编程思想》读书笔记(一)开篇&第五章(1)
查看>>
swift--调用系统单例实现打电话
查看>>