POJ 1523 SPF 求割点的好(板子)题!
题意:
给个无向图,问有多少个割点,对于每个割点求删除这个点之后会产生多少新的点双联通分量
题还是很果的
怎么求割点请参考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 求割点的好(板子)题!的更多相关文章
- poj 1523 SPF 求割点以及删除该割点后联通块的数量
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7136 Accepted: 3255 Description C ...
- POJ 1523 SPF (无向图割点)
<题目链接> 题目大意: 给你一个连通的无向图,问你其中割点的编号,并且输出删除该割点后,原图会被分成几个连通分量. 解题分析: Tarjan求割点模板题. #include <cs ...
- POJ 1523 Tarjan求割点
SPF Description Consider the two networks shown below. Assuming that data moves around these network ...
- poj 1523 SPF(tarjan求割点)
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- poj 1523"SPF"(无向图求割点)
传送门 题意: 有一张联通网络,求出所有的割点: 对于割点 u ,求将 u 删去后,此图有多少个联通子网络: 对于含有割点的,按升序输出: 题解: DFS求割点入门题,不会的戳这里
- poj 1523 SPF(双连通分量割点模板)
题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点 ...
- POJ 1523 SPF 割点 Tarjan
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9317 Accepted: 4218 Description C ...
- POJ 1144 无向图求割点
学长写的: #include<cstdio>#include<cstdlib>#include<cmath>#include<iostream>#in ...
- zoj 1119 / poj 1523 SPF (典型例题 求割点 Tarjan 算法)
poj : http://poj.org/problem?id=1523 如果无向图中一个点 u 为割点 则u 或者是具有两个及以上子女的深度优先生成树的根,或者虽然不是一个根,但是它有一个子女 w, ...
随机推荐
- git 常用命令及仓库创建
一.常用命令 1.添加到本地仓库缓存 git add . 2.查看本地仓库状态 git status 3.提交到本地仓库 git commit -am 'project init' 4.连接线上分支 ...
- pip命令小结
pip的另一种调用方式 python -m pip通过指定python的名字来指定特定的pip pip freeze > 项目目录/requirements.txt导出pip中下载的包目录 pi ...
- Linux中用户与用户组管理
1.基础知识 Linux作为一种多用户的操作系统(服务器系统),允许多个用户同时登陆到系统上,并响应每个用户的请求. 任何需要使用操作系统的用户,都需要一个系统账号,账号分为:管理员账号与普通用户账号 ...
- Target runtime Apache Tomcat v8.5 is not defined.
Target runtime Apache Tomcat v8.5(或者其它版本) is not defined. 这个错误通常是在从文件夹中导入别人的项目的时候发生,因为 在 .setting 中有 ...
- axios进行ajax请求得不到数据,cookie无法携带问题
这个坑也是很早之前踩过,今天做项目的时候居然忘了,怎么都拿不到数据,果然好记性不如烂笔头,决定写篇博客来祭奠下我的猪脑子: 原因可能就是你发送请求的时候,需要设置cookie,然而你的cookie并没 ...
- 初试PHP连接sql server
最开始想使用 pdo_sqlsrv 拓展,但是一直没成功,本文采用的是 pdo_dblib + freetds. 环境:CentOS 6.8.PHP 5.6.20 freetds wget ftp:/ ...
- Spark 源码阅读——任务提交过程
当我们在使用spark编写mr作业是,最后都要涉及到调用reduce,foreach或者是count这类action来触发作业的提交,所以,当我们查看这些方法的源码时,发现底层都调用了SparkCon ...
- TouTiao开源项目 分析笔记4==>一个简单APP 整体常用框架
1.效果预览 1.1.如下图所以,到目前为止所有的功能. 2.从InitApp开始->SplashActivity->MainActivity 2.1.InitApp源代码.这是整个项目的 ...
- Android Studio的Log日志调试
本人菜鸟一枚,极大发挥了搜索的功能.现记录一番,以备后患. 用断点真的很烦,因为之前写linux的时候,就是用最蠢但是也是挺有帮助的printf()来进行调试. 其实用Log输出日志的原理也是差不多的 ...
- android onLayout死循环
有时候,开发代码的时候,真的是因为你的无知,就导致了程序性能低下. 比如: @Override protected void onLayout(boolean changed, int l, int ...