http://poj.org/problem?id=1144

题意:给你一些点,某些点直接有边,并且是无向边,求有多少个点是割点

割点:就是在图中,去掉一个点,无向图会构成多个子图,这就是割点

Tarjan算法求割点的办法

  1. 如果该点为根,那么它的子树必须要大于1
  2. 如果该点不为根,那么当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的更多相关文章

  1. poj 1144 Network 图的割顶判断模板

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8797   Accepted: 4116 Descripti ...

  2. POJ 1144 Network(Tarjan求割点)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12707   Accepted: 5835 Descript ...

  3. poj 1144 Network(无向图求割顶数)

    题目链接:poj 1144 题意就是说有 n(标号为 1 ~ n)个网点连接成的一个网络,critical places 表示删去后使得图不连通的顶点,也就是割顶,求图中割顶的个数. 直接上大白书上的 ...

  4. POJ 1144 Network(无向图连通分量求割点)

    题目地址:id=1144">POJ 1144 求割点.推断一个点是否是割点有两种推断情况: 假设u为割点,当且仅当满足以下的1条 1.假设u为树根,那么u必须有多于1棵子树 2.假设u ...

  5. poj 1144 Network(割点)

    题目链接: http://poj.org/problem?id=1144 思路分析:该问题要求求出无向联通图中的割点数目,使用Tarjan算法即可求出无向联通图中的所有的割点,算法复杂度为O(|V| ...

  6. poj 1144 (Tarjan求割点数量)

    题目链接:http://poj.org/problem?id=1144 描述 一个电话线公司(简称TLC)正在建立一个新的电话线缆网络.他们连接了若干个地点分别从1到N编号.没有两个地点有相同的号码. ...

  7. poj 1144(割点)

    题目链接:http://poj.org/problem?id=1144 题意:给出一个无向图,求关键节点的个数. 分析:双连通分量Tarjan算法直接求割点就行了,裸的模板题. AC代码: #incl ...

  8. POJ 1144 Network(无向图的割顶和桥模板题)

    http://poj.org/problem?id=1144 题意: 给出图,求割点数. 思路: 关于无向图的割顶和桥,这篇博客写的挺不错,有不懂的可以去看一下http://blog.csdn.net ...

  9. poj 1144(求割点个数)

    题目链接:http://poj.org/problem?id=1144 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根结点并且它的子女个数大于等于2,则v是割点.2.如果点v不是根结点,并 ...

随机推荐

  1. DeepMind背后的人工智能:深度学习原理初探

    去年11月,一篇名为<Playing Atari with Deep Reinforcement Learning>的文章被初创人工智能公司DeepMind的员工上传到了arXiv网站.两 ...

  2. canvas-图片翻转

    图片90度翻转 在canvas中插入图片需先加载图片(利用Image对象);加载完成后再执行操作drawImage(obj,x,y,w,h) 插入图片的坐标宽高等值 <!DOCTYPE html ...

  3. Spring Boot

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...

  4. 【应用】_有道词典客户端一个后缀名为sql的数据库。

    [缘起] 在清理电脑磁盘的时候,看一看各安装文件夹有占用了多大容量,发现有道词典居然达140MB了,于是进去看看. 发现个有趣的文件:XXX.sql. 首先我们看一看它的安装文件夹的结构: Dict ...

  5. 冰冻三尺非一日之寒--web来了

    第十四章    html  css 1-1Html和CSS的关系学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的:1. H ...

  6. Java中判断字符串是否为数字的五种方法

    //方法一:用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ ...

  7. 每次更新obj和bin文件夹都生成nGB的文件

    今天受不了,把它们符号链接到机械硬盘上了 用mklink /d 创建的,也不知道和/j有什么区别

  8. CodeForces 24D Broken Robot

    题意:n*m的棋盘,一个机器人在(i,j)处,每次等概率地停在原地,向左移动一格,向右移动一格,向下移动一格(不能移出棋盘).求走到最后一行所需期望步数.n<=1000,m<=1000 一 ...

  9. Mysql 常用 SQL 语句集锦

    Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...

  10. ubuntu 下应用 Python 和 SL4A 的 Android 应用程序搭建您自己的android研发环境

    转载自:http://code.qtuba.com/article-50680.html 最近在看<head first python>,书中有讲python在android中进行开发的章 ...