题意:

给个无向图,问有多少个割点,对于每个割点求删除这个点之后会产生多少新的点双联通分量


题还是很果的

怎么求割点请参考tarjan无向图

关于能产生几个新的双联通分量,对于每个节点u来说,我们判断他是否是割点,即判断是否满足他的儿子v的low[v]>dfn[u]

而这个时候割掉这个点就会让双联通分量增加,所以搞一个数组记录一下这个操作的次数就行

请注意在是否是根节点的问题上特判

!!注意输出格式!!

 #include<cstdio>
#include<algorithm>
#include<cstring>
#define N 5010
#define M 10100
#define Max(a,b,c) max(max(a,b),c)
using namespace std;
int head[N],n,m,ecnt=,u,v,dfn[N],low[N],indx,du[N],ans,isap[N],ap,task,sum[N];
struct edge
{
int u,v,nxt;
}e[M*];
void add(int u,int v)
{
e[ecnt].v=v;
e[ecnt].nxt=head[u];
e[ecnt].u=u;
head[u]=ecnt++;
e[ecnt].v=u;
e[ecnt].nxt=head[v];
e[ecnt].u=v;
head[v]=ecnt++;
}
void dfs(int u,int fa)
{
dfn[u]=low[u]=++indx;
int n_ch=;
for (int i=head[u];i;i=e[i].nxt)
{
int v=e[i].v;
if (!dfn[v])
{
dfs(v,i);
low[u]=min(low[u],low[v]);
if (low[v]>=dfn[u])
isap[u]=,ap++,sum[u]++;
n_ch++;
}
else
if (v!=fa)
low[u]=min(dfn[v],low[u]);
}
if (fa==- && n_ch==)
isap[u]=,ap--;
if (isap[u] && fa!=-) sum[u]++;
}
void init()
{
n=;
memset(sum,,sizeof(sum));
memset(head,,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(isap,,sizeof(isap));
ecnt=;
ans=;
indx=;
ap=;
}
void solve()
{
if (n==) return;
task++;
for (int i=;i<=n;i++)
if (!dfn[i]) dfs(i,-);
printf("Network #%d\n",task);
if (ap==)
printf(" No SPF nodes\n");
for (int i=;i<=n;i++)
if (isap[i])
printf(" SPF node %d leaves %d subnets\n",i,sum[i]);
putchar('\n');
init();
}
int main()
{
// freopen("1.in","r",stdin);
while ()
{
while (scanf("%d",&u)!=EOF)
{
if (u==)
{
solve();
continue;
}
if (scanf("%d",&v)==EOF) break;
n=Max(n,u,v);
add(u,v);
// printf("%d %d\n",u,v);
}
if (n==) break;
}
return ;
}

POJ 1523 SPF 求割点的好(板子)题!的更多相关文章

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

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

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

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

  3. POJ 1523 Tarjan求割点

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

  4. poj 1523 SPF(tarjan求割点)

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

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

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

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

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

  7. POJ 1523 SPF 割点 Tarjan

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

  8. POJ 1144 无向图求割点

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

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

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

随机推荐

  1. 全文检索(Lucene&Solr)

    全文检索(Lucene&Solr) 1)什么是全文检索?为什么需要全文检索? 结构化数据(mysql等)方便查询,而非结构化数据(如多篇文章)是难以查询到自己需要的,所以要使用全文检索. 全文 ...

  2. 基于mybatis设计简单OA系统问题1

    全类名与全路径 全类名是某个文件在项目中的位置,格式为包名.类名 路径分为相对路径和绝对路径. 绝对路径是指这个文件在操作系统中的位置, 相对路径通过这个文件的上一级  ./  或下一级/ 来指定文件 ...

  3. js函数的默认参数

    function f(flag, start, end, msg){ flag = flag == false ? flag : true; start = start || null; start ...

  4. Linux用户与组管理命令

    1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. who | cut -d" " -f1 | sort -u 或 who | cut -d ...

  5. 为什么 redis 单线程却能支撑高并发

    redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理 ...

  6. php扩展开发-资源类型

    资源类型在内核中的结构 //zend_list.h typedef struct _zend_rsrc_list_entry { void *ptr; int type; int refcount; ...

  7. 匿名函数lambda python

    lambda 的主体是一个表达式,不是一个代码块lambda 只有一行,仅仅能在lambda表达式种封装有限的逻辑进去匿名函数:需要一个函数,而又不想动脑筋去想名字 #普通函数的定义 def f(a, ...

  8. WRITE命令 書式設定オプション

    書式設定オプション WRITE 命令では.さまざまな書式設定オプションが使用することができます. 構文 WRITE ....f option. 全データ型の書式設定オプション オプション 機能 LEF ...

  9. Android面试收集录11 Window+Activity+DecorView+ViewRoot之间的关系

    一.职能简介 Activity Activity并不负责视图控制,它只是控制生命周期和处理事件.真正控制视图的是Window.一个Activity包含了一个Window,Window才是真正代表一个窗 ...

  10. Lua2

    1. 迭代器与Closure 在Lua中,迭代器通常为函数,每调用一次函数,即返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之间保持一些状态,这样才能知道它所在的位置和下一次遍历时的位置. ...