POJ 1144
http://poj.org/problem?id=1144
题意:给你一些点,某些点直接有边,并且是无向边,求有多少个点是割点
割点:就是在图中,去掉一个点,无向图会构成多个子图,这就是割点
Tarjan算法求割点的办法
- 如果该点为根,那么它的子树必须要大于1
- 如果该点不为根,那么当low[v]>=dnf[u]时,为割点
Low[v]>=dnf[u]也就是说明U的子孙点只能通过U点访问U的祖先点
#include <stdio.h>
#include <stack>
#include <string.h>
#define maxn 505 using namespace std; stack <int >s; int head[maxn],n,pos,dfn[maxn],low[maxn],bcnt,dindex,num[maxn],root; bool vis[maxn]; struct node{
int next,to;
}edge[maxn]; void add(int u,int v)
{
edge[pos].to = v;
edge[pos].next = head[u];
head[u] = pos++;
} void Tarjan(int u)
{
dfn[u] = low[u] = ++dindex;
vis[u] = true;
s.push(u);
for(int i = head[u]; i != - ; i = edge[i].next)
{
int v = edge[i].to;
if(!vis[v])
{
Tarjan(v);
if(low[v]<low[u]) low[u] = low[v];
if(low[v]>=dfn[u]&&u!=)
{
num[u]++;
}else if(u==)
root++;
}else if(dfn[v]<low[u])
low[u] = dfn[v];
}
} int main()
{
int u,v,ans;
// freopen("in.txt","r",stdin);
while(scanf("%d",&n),n)
{ memset(head,-,sizeof(head));
memset(vis,false,sizeof(vis));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(num,,sizeof(num));
pos = ;
ans = ;
while(scanf("%d",&u)&&u)
{
while(getchar()!='\n')
{
scanf("%d",&v);
add(u,v);
add(v,u);
}
}
bcnt = dindex = root=;
for(int i = ;i<=n;i++)
if(!dfn[i]) Tarjan(i);
for(int i = ; i<=n;i++)
if(num[i]) ans++;
if(root>) ans++;
printf("%d\n",ans);
}
return ;
}
https://www.byvoid.com/blog/scc-tarjan/一个很好的学习Tarjan的博客
POJ 1144的更多相关文章
- poj 1144 Network 图的割顶判断模板
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8797 Accepted: 4116 Descripti ...
- POJ 1144 Network(Tarjan求割点)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12707 Accepted: 5835 Descript ...
- poj 1144 Network(无向图求割顶数)
题目链接:poj 1144 题意就是说有 n(标号为 1 ~ n)个网点连接成的一个网络,critical places 表示删去后使得图不连通的顶点,也就是割顶,求图中割顶的个数. 直接上大白书上的 ...
- POJ 1144 Network(无向图连通分量求割点)
题目地址:id=1144">POJ 1144 求割点.推断一个点是否是割点有两种推断情况: 假设u为割点,当且仅当满足以下的1条 1.假设u为树根,那么u必须有多于1棵子树 2.假设u ...
- poj 1144 Network(割点)
题目链接: http://poj.org/problem?id=1144 思路分析:该问题要求求出无向联通图中的割点数目,使用Tarjan算法即可求出无向联通图中的所有的割点,算法复杂度为O(|V| ...
- poj 1144 (Tarjan求割点数量)
题目链接:http://poj.org/problem?id=1144 描述 一个电话线公司(简称TLC)正在建立一个新的电话线缆网络.他们连接了若干个地点分别从1到N编号.没有两个地点有相同的号码. ...
- poj 1144(割点)
题目链接:http://poj.org/problem?id=1144 题意:给出一个无向图,求关键节点的个数. 分析:双连通分量Tarjan算法直接求割点就行了,裸的模板题. AC代码: #incl ...
- POJ 1144 Network(无向图的割顶和桥模板题)
http://poj.org/problem?id=1144 题意: 给出图,求割点数. 思路: 关于无向图的割顶和桥,这篇博客写的挺不错,有不懂的可以去看一下http://blog.csdn.net ...
- poj 1144(求割点个数)
题目链接:http://poj.org/problem?id=1144 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根结点并且它的子女个数大于等于2,则v是割点.2.如果点v不是根结点,并 ...
随机推荐
- iOS中使用正则
一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- 【Codeforces 738B】Spotlights
Theater stage is a rectangular field of size n × m. The director gave you the stage's plan which act ...
- Javascript自执行匿名函数(function() { })()的原理分析
匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hell ...
- Android必学——AsyncTask
第一章 AsyncTask的基本构成 为是么要异步任务 1)Android单线程模型 2)耗时操作放在非主线程中执行 AsyncTask为何而生 1)子线程中跟新UI 2)封装.简化异步操作 pub ...
- BZOJ 3158: 千钧一发
3158: 千钧一发 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1201 Solved: 446[Submit][Status][Discuss ...
- 解决SmartGit序列号问题
SmartGit过了30天试用期之后,就需要用户输入序列号才能继续使用,有一个办法可以跳过输入序列号. 一.windows+R 输入:%APPDATA%\syntevo\SmartGit 二.打开7 ...
- 个人对B/S项目的一些理解(一)
以下是我自工作以来,结合对C/S项目的认知,对B/S项目的一些理解. 如有不足或者错误,请各位指正. B/S browser/server ----对于这两个软件的个人看法 本质上,也是两个软 ...
- TomCat的安装与配置方法
经过自己的研究,各种烦,所以要写个博客,帮助大家安装这个软件. 一.安装TomCat(因为大家都安装了jdk,所以就不写了) 1.下载TomCat 网址如下:http://tomcat.apache. ...
- Believe Me , I Can !
Believe Me , I Can ! ---DF 第一阶段:(年底1-27之前) 1. 熟练使用JavaScript/CSS/HTML,熟悉HTML5 / CSS3: 2. 熟悉JavaScr ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...