题目链接: http://poj.org/problem?id=1144

思路分析:该问题要求求出无向联通图中的割点数目,使用Tarjan算法即可求出无向联通图中的所有的割点,算法复杂度为O(|V| + |E|);

代码如下:

#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std; const int MAX_N = + ;
const int MAX_M = + ;
char str[MAX_M];
vector<int> G[MAX_N];
int pre[MAX_N], is_cut[MAX_N], low[MAX_N];
int dfs_clock; inline int Min(int a, int b) { return a < b ? a : b; }
int Dfs(int u, int fa)
{
int lowu = pre[u] = ++dfs_clock;
int child = ; for (int i = ; i < G[u].size(); ++i)
{
int v = G[u][i];
if (!pre[v])
{
child++;
int lowv = Dfs(v, u);
lowu = Min(lowu, lowv);
if (lowv >= pre[u])
is_cut[u] = true;
} else if (pre[v] < pre[u] && v != fa)
lowu = Min(lowu, pre[v]);
}
if (fa < && child == )
is_cut[u] = ;
low[u] = lowu;
return lowu;
} int main()
{
int ver_num; while (scanf("%d", &ver_num) != EOF && ver_num)
{
getchar( );
int ver_start, ver_next; memset(pre, , sizeof(pre));
memset(low, , sizeof(low));
memset(is_cut, , sizeof(is_cut));
for (int i = ; i < MAX_N; ++i)
G[i].clear( );
while (scanf("%d", &ver_start) && ver_start)
{
while (getchar() != '\n')
{
scanf("%d", &ver_next);
G[ver_start].push_back(ver_next);
G[ver_next].push_back(ver_start);
}
}
int cut_ver_count = ;
dfs_clock = ;
Dfs(, -);
for (int i = ; i <= ver_num; ++i)
{
if (is_cut[i])
cut_ver_count++;
}
printf("%d\n", cut_ver_count);
}
return ;
}

poj 1144 Network(割点)的更多相关文章

  1. poj 1144 Network(割点 入门)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10907   Accepted: 5042 Descript ...

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

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

  3. POJ 1144 Network(Tarjan求割点)

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

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

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

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

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

  6. poj 1144 Network 【求一个网络的割点的个数 矩阵建图+模板应用】

    题目地址:http://poj.org/problem?id=1144 题目:输入一个n,代表有n个节点(如果n==0就结束程序运行). 在当下n的这一组数据,可能会有若干行数据,每行先输入一个节点a ...

  7. poj 1144 Network【双连通分量求割点总数】

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11042   Accepted: 5100 Descript ...

  8. POJ 1144 Network(tarjan 求割点个数)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17016   Accepted: 7635 Descript ...

  9. poj 1144 Network 无向图求割点

    Network Description A Telephone Line Company (TLC) is establishing a new telephone cable network. Th ...

随机推荐

  1. leetcode Longest Palindromic Substring python

    class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str ...

  2. 让IE6也能智能控制图片最大宽、高度

    当一个图片的宽度或高度超出了容器时,我们一般会用max-width或max-height来设置其最大宽.高度,让图片不会超出容器,但是如果同时设置了最大高度和最大宽度时,有可能会造成图片最终显示会有些 ...

  3. 页面打开直接执行a点击事件

    <script> window.onload = function(){ function autoclick(){ var url = document.getElementById(' ...

  4. hdu 1524 A Chess Game 博弈

    题目链接 给出一个有向无环图, 上面放有一些棋子, 两个人轮流移动棋子, 当一个人无法移动时, 算输. 求出每一个点的sg值, 异或就可以.出度为0的点sg值为0. #include<bits/ ...

  5. js中this的四种使用方法

    0x00:js中this的四种调用模式 1,方法调用模式 2,函数调用模式 3,构造器调用模式 4,apply.call.bind调用模式 0x01:第一种:方法调用模式 (也就是用.调用的)this ...

  6. 如何实现win7和VirtualBox中Ubuntu系统共享文件夹

    设备: 1.win7 旗舰版    2.VirtualBox虚拟机    3.Ubuntu12.04 以前在VM虚拟机中可以直接进行复制就可以将win7系统的文件复制到虚拟机中,然后现在安装了Virt ...

  7. SQL语句的MINUS,INTERSECT和UNION ALL

    SQL语句中的三个关键字:MINUS(减去),INTERSECT(交集)和UNION ALL(并集); 关于集合的概念,中学都应该学过,就不多说了.这三个关键字主要是对数据库的查询结果进行操作,正如其 ...

  8. 工具类_java 操作cookie

    import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;im ...

  9. hdu 5461 Largest Point

    Thinking about it: 对于式子 a * ti * ti + b * tj,可以看作时有两部分构成 a * ti * ti 和 b * tj,如果整个式子要最大,则要求这两部分都要尽量大 ...

  10. UVA 11549 Calculator Conundrum (Floyd判圈算法)

    题意:有个老式计算器,每次只能记住一个数字的前n位.现在输入一个整数k,然后反复平方,一直做下去,能得到的最大数是多少.例如,n=1,k=6,那么一次显示:6,3,9,1... 思路:这个题一定会出现 ...