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不是根结点,并 ...
随机推荐
- neo4j-备份、恢复
neo4j备份命令(本例linux) neo4j-backup 命令使用: ./neo4j-backup -full -from single://[machine IP] -to ~/backup- ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- BeautifulSoup :功能使用
# -*- coding: utf-8 -*- ''' # Author : Solomon Xie # Usage : 测试BeautifulSoup一些用法及容易出bug的地方 # Envirom ...
- BZOJ2809: [Apio2012]dispatching
传送门 主席树经典题. 首先把树搞出来,然后搞出来DFS序.然后离散化点权,在DFS序上建立主席树. 对于每个点对应的区间,查找对应的区间最大的点数即可. //BZOJ2809 //by Cydiat ...
- 做web开发和测试,修改hosts指定某个域名访问某个特定的IP后,如何使hosts立即生效的方法
本文转自SUN'S BLOG,原文地址:http://whosmall.com/post/143 hosts的配置方法: 在windows系统中,找到C:\windows\system32\drive ...
- http://www.cnblogs.com/kissdodog/p/4159176.html
想要自己一个人完成app,那么后台接口也必须自己动动手.不用担心,其实很简单的,给自己信心!下面就以登录注册为例,做一个api接口 首先在mac上搭建PHP环境,下载 MAMP Pro for Mac ...
- Html中设置访问页面不在后进行其他页面跳转
Html中设置访问页面不在后进行其他页面跳转 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...
- 20145204&20145212信息安全系统实验二
20145204&20145212信息安全系统实验二 链接
- 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法
适用所有用UC整合 阿里云提示漏洞: discuz中的/api/uc.php存在代码写入漏洞,导致黑客可写入恶意代码获取uckey,.......... 漏洞名称:Discuz uc.key泄露导致代 ...
- 初识exception
一.exception的分类 根据此exception(异常)是否可以打断正在执行的指令,可以将exception分为 asynchronous exception 和 synchronous exc ...