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不是根结点,并 ...
随机推荐
- Python版设计模式: 创建型模式:单例模式和工厂模式家族
一. 单例模式(Singleton) 所谓单例模式,也就是说不管什么时候都要确保只有一个对象实例存在.很多情况下,整个系统中只需要存在一个对象,所有的信息都从这个对象获取,比如系统的配置对象,或者是线 ...
- haproxy利用ACL规则封禁自定义IP地址拒绝访问
现在有一个需求就是在发版的时候希望除公司IP外的外网访问服务的时候都是拒绝访问的 现在利用haproxy 的acl规则作出限制 errorfile 403 /etc/haproxy/err ...
- 关于js中this关键字的补充
前面: 前面虽然综合了网络上不少大牛的心得,但感觉还是意犹未尽,为了彻底搞清楚js中this的相关知识,决定再写一篇.个人觉得,在技术上,除非钻到细枝末节,否则很难达至非常高的水平. 补充1: 无法重 ...
- CVE-2016-1240 Tomcat 服务本地提权漏洞
catalogue . 漏洞背景 . 影响范围 . 漏洞原理 . 漏洞PoC . 修复方案 1. 漏洞背景 Tomcat是个运行在Apache上的应用服务器,支持运行Servlet/JSP应用程序的容 ...
- 他(he)(钟神)
他[问题描述]一张长度为N的纸带,我们可以从左至右编号为0 −N(纸带最左端标号为0) .现在有M次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带的长度是多少.[输入格式]第一行两个数字N, ...
- eclipse maven项目错误
eclipse maven项目错误:Failure to transfer org.codehaus.plexus:plexus-interpolation:jar:1.15 from http:// ...
- errored out in DoExecute, couldn't PrepareToExecuteJITExpression
error: Couldn't materialize struct: size of variable <varName> disagrees with the ValueObject' ...
- c语言一些知识点的记录
1.extern关键字 extern关键字可以置于变量或者函数前面,用于告诉编译器此变量或函数定义于其他的模块.
- PHP XML和数组互相转换
//数组转XML function arrayToXml($arr) { $xml = "<xml>"; foreach ($arr as $key=>$val) ...
- 5天揭秘js高级技术-第二天
一.数组 1. 什么是数组? 数组就是一组数据的集合: 其表现形式就是内存中的一段连续的内存地址: 数组名称其实就是连续内存地址的首地址: 2. 关于js中的数组定义 数组定义无需指定数据类型: 数组 ...