题目链接

题意 : 找出图中所有的割点,然后输出删掉他们之后还剩多少个连通分量。

思路 : v与u邻接,要么v是u的孩子,要么u是v的祖先,(u,v)构成一条回边。

 //poj1523
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std ; int edge[][],dfn[],low[],subnet[] ;
int tot,Node ,son; void dfs(int u)
{
dfn[u] = low[u] = ++tot ;
for(int v = ; v <= Node ; v++)
{
if(edge[u][v])
{
if(!dfn[v])
{
dfs(v) ;
low[u] = min(low[v],low[u]) ;
if(low[v] >= dfn[u])
{
if(u != )//非根节点
subnet[u] ++ ;
else son ++ ;
}
}
else
{
low[u] = min(low[u],dfn[v]) ;
}
}
}
} void Init()
{
tot = son = Node = ;
memset(dfn,,sizeof(dfn)) ;
memset(low,,sizeof(low)) ;
memset(subnet,,sizeof(subnet)) ;
memset(edge,,sizeof(edge)) ;
}
int main()
{
int m,n ;
int casee = ;
while(scanf("%d",&m) && m)
{
scanf("%d",&n) ;
Init() ;
Node = max(m,max(n,Node)) ;
edge[m][n] = edge[n][m] = ;
while(~scanf("%d",&m) && m)
{
scanf("%d",&n) ;
Node = max(m,max(n,Node)) ;
edge[m][n] = edge[n][m] = ;
}
// if(casee > 1)
// puts("") ;
printf("Network #%d\n",casee ++) ;
dfs() ;
if(son > )
subnet[] = son - ;
int flag = ;
for(int i = ; i <= Node ; i++){
if(subnet[i])
{
flag = ;
printf(" SPF node %d leaves %d subnets\n",i,subnet[i]+) ;
}
}
if(!flag)
puts(" No SPF nodes") ;
puts("") ;
}
return ;
}

POJ 1523 SPF(求割点)的更多相关文章

  1. POJ 1523 SPF 求割点的好(板子)题!

    题意: 给个无向图,问有多少个割点,对于每个割点求删除这个点之后会产生多少新的点双联通分量 题还是很果的 怎么求割点请参考tarjan无向图 关于能产生几个新的双联通分量,对于每个节点u来说,我们判断 ...

  2. poj 1523 SPF 求割点以及删除该割点后联通块的数量

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7136   Accepted: 3255 Description C ...

  3. POJ 1523 SPF (无向图割点)

    <题目链接> 题目大意: 给你一个连通的无向图,问你其中割点的编号,并且输出删除该割点后,原图会被分成几个连通分量. 解题分析: Tarjan求割点模板题. #include <cs ...

  4. POJ 1523 Tarjan求割点

    SPF Description Consider the two networks shown below. Assuming that data moves around these network ...

  5. poj 1523 SPF(tarjan求割点)

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  6. poj 1523"SPF"(无向图求割点)

    传送门 题意: 有一张联通网络,求出所有的割点: 对于割点 u ,求将 u 删去后,此图有多少个联通子网络: 对于含有割点的,按升序输出: 题解: DFS求割点入门题,不会的戳这里

  7. poj 1523 SPF(双连通分量割点模板)

    题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点 ...

  8. POJ 1523 SPF 割点 Tarjan

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9317   Accepted: 4218 Description C ...

  9. POJ 1144 无向图求割点

     学长写的: #include<cstdio>#include<cstdlib>#include<cmath>#include<iostream>#in ...

  10. zoj 1119 / poj 1523 SPF (典型例题 求割点 Tarjan 算法)

    poj : http://poj.org/problem?id=1523 如果无向图中一个点 u 为割点 则u 或者是具有两个及以上子女的深度优先生成树的根,或者虽然不是一个根,但是它有一个子女 w, ...

随机推荐

  1. linux下更改文件夹所属用户和用户组

    改变所属用户组:chgrp -R users filename -R是为了递归改变文件夹下的文件和文件夹,users是要改为的用户组名称,filename是要改变的文件夹名称 ============ ...

  2. hdu 5146 Sequence

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5146 Sequence Description Today we have a number sequ ...

  3. Oracle ODP.NET连接池

    数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据 ...

  4. iOS学习之Object-C语言内存管理高级

    一.属性的内存管理

  5. 5 给我们的c#程序添加注释

    注释是你的程序中的一个重要部分.在程序中添加注释是用来告诉你和其他人你的程序是做什么用的,你的思路是怎样的.注释可以用你熟悉的中文进行添加. 当你想暂时把你程序中的某些语句去掉的时候,不需要把他们删除 ...

  6. 快速生成R语言报告(markdown+Rstudio)

    先预览一下用Markdown写的报告[http://rpubs.com/loness/167347],这是HTML格式,你也可以导出Word.pdf,但是导出pdf时文中不能有中文,但是可以使用“pd ...

  7. 查看linux命令类型

    type type -a type type是内建变量 root@akayer-p6:~# type -a lsls 是 `ls --color=auto' 的别名ls 是 /bin/ls

  8. 本人在安装ADT Bundle for windows的各种问题总结

    本人在安装ADT Bundle for windows的各种问题总结 1.解决国内访问Google服务器的困难: 1.启动 Android SDK Manager : 2.打开主界面,依次选择「Too ...

  9. Eclipse Kepler中配置JadClipse

    Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不太方便.不过幸好有一个eclipse的插件JadClipse ...

  10. 利用glassfish4任意文件读取拿权限的一些思路

    只要讨论的是linux环境测试发现只针对GlassFish4,且基本上是已root运行的http://www.wooyun.org/bugs/wooyun-2010-0144595 zoomeye d ...