POJ1144Network(求割点个数)
题意:一共n割点,然后若干行,每行第一个输入一个点,然后若干个点表示与他相连,0单独一行表示一个样例的结束。然后求图中的割点个数
割点:去掉该点之后得到的图不在连通,那么该店就是割点
一般割点有两种情况:1、父节点,当有两个或两个以上儿子节点的时候 2、dfn[x]表示深搜是x点是第几个开始搜索的,low[x]表示x及其父节点所能指向的最早的祖先,这个边官方就做回边,也就是回边往上能最高能到哪。如果 low[x] >= dfn[x] 也就是说x他的儿子们最多到x甚至还在x的下面,所以x就是割点,去掉x时候,x的儿子们就和x的上面的祖先们失去了联系
然后就是对low[u]的更新:普通情况下,就是u->v,然后v没有没访问,所以low[u] = min( low[u], low[v]) 另一中情况就是回边的情况,u->v然而v已经访问完了,说明v在上面,u是下面的,u是指向祖先的。此时 low[u] = min( low[u], dfn[v]);
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int Max = ;
vector<int> g[Max];
int vis[Max],low[Max],pre[Max],iscut[Max];
int n,root,time;
int get_min(int x, int y)
{
if(x > y)
return y;
return x;
}
void dfs(int u)
{
int child = ;
pre[u] = low[u] = ++time;
vis[u] = ;
int len = g[u].size();
for(int i = ; i < len; i++)
{
int w = g[u][i];
if(!vis[w])
{
child++;
dfs(w);
low[u] = get_min(low[u], low[w]);
if(u == root && child == ) //根节点如果有两个以上儿子节点就是割点
iscut[u] = ;
if(u != root && low[w] >= pre[u]) //u的子孙节点如果指向的最早节点还比u要大的话,u也是割点
iscut[u] = ;
}
else if(w != u) // 这是应该避免重点的情况吗?
low[u] = get_min(low[u], pre[w]);
}
}
int main()
{
while (scanf("%d", &n) != EOF && n)
{
int a, b;
for(int i = ; i <= n; i++)
g[i].clear();
while(scanf("%d", &a) && a)
{
char ch;
while ( (ch = getchar()) != '\n')
{
scanf("%d", &b);
g[a].push_back(b);
g[b].push_back(a);
}
}
memset(pre, , sizeof(pre));
memset(vis, , sizeof(vis));
memset(low, , sizeof(low));
memset(iscut, , sizeof(iscut));
time = ;
root = ;
dfs();
int ans = ;
for(int i = ; i <= n; i++)
if(iscut[i])
ans++;
printf("%d\n", ans);
}
}
POJ1144Network(求割点个数)的更多相关文章
- loj 1063(求割点个数)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26780 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根 ...
- POJ 1144 Network(tarjan 求割点个数)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17016 Accepted: 7635 Descript ...
- UVA-315 无向图求割点个数
题意抽象: 给定一个无向图,输出割点个数. 割点定义:删除该点后,原图变为多个连通块. 考虑一下怎么利用tarjan判定割点: 对于点u和他相连的当时还未搜到的点v,dfs后如果DFN[u]<= ...
- UVA 315 315 - Network(求割点个数)
Network A Telephone Line Company (TLC) is establishing a new telephone cable network. They are con ...
- poj 1144(求割点个数)
题目链接:http://poj.org/problem?id=1144 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根结点并且它的子女个数大于等于2,则v是割点.2.如果点v不是根结点,并 ...
- HDU2485Destroying the bus stations 拆点网络流求割点个数
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2485 题目要求:删除最少的点,使得源点到汇点的距离大于k 思路:拆点.建图求费用小于等于k的最大流 # ...
- poj1144 Network【tarjan求割点】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4319585.html ---by 墨染之樱花 [题目链接]http://poj.org/p ...
- 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)
Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
- UVA - 315 Network(tarjan求割点的个数)
题目链接:https://vjudge.net/contest/67418#problem/B 题意:给一个无向连通图,求出割点的数量.首先输入一个N(多实例,0结束),下面有不超过N行的数,每行的第 ...
随机推荐
- JAVA GC 简单总结
GC分代 GC的英文全拼是Garbage Collection,意思是垃圾收集. Java 将堆内存分为三代来管理: - 年轻代 (Young Generation) - 年老代 (Old Gener ...
- 【有人@我】Android中高亮变色显示文本中的关键字
应该是好久没有写有关技术类的文章了,前天还有人在群里问我,说群主很长时间没有分享干货了,今天分享一篇Android中TextView在大段的文字内容中如何让关键字高亮变色的文章 ,希望对大家有所帮助, ...
- 调试记录:The public type <<classname>> must be defined in its own file
(摘自stackoverflow) “The public type <<classname>> must be defined in its own file” error ...
- hdu2642二维树状数组单点更新+区间查询
http://acm.hdu.edu.cn/showproblem.php?pid=2642 题目大意:一个星空,二维的.上面有1000*1000的格点,每个格点上有星星在闪烁.一开始时星星全部暗淡着 ...
- ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-上 )
ConfigSections的结构 首先我们先回顾一下ConfigSections的结构和它子节点的说明,如下: 1: <configSections> 2: <sectionGro ...
- Image Segmentation的定义
Definition 图像分割将一张图分为\(n\)个region, 需要满足下面5个条件 每一个像素都要属于一个region 每个region都是连通的 region与region之间没有交集 re ...
- 使用express4.X + jade + mongoose + underscore搭建个人电影网站
(-。-;), 周末过得真是快啊, 很久以前就看到imooc上有个搭建个人电影网站一期 ,二期的视频, 这两周宅家里撸玩没事干, 我也学着搭了一个, 这些东西都是基础, 只要花点时间很好学的, no ...
- 51nod 循环数组最大子段和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 对于普通的数组,只要求一次最大子段和即可.但是这题是可以循环的,所 ...
- jquery提交表单,回调函数
1.使用jquery 绑定事件,执行以下代码,提交单并使用回调函数 $form.serialize():serialize()序列号表单参数 var $form = $("#form&quo ...
- jquery datatable
<html><head></head> <script type="text/javascript"> $(document).re ...