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, ...
随机推荐
- Fetch 头像剪切修改
前言:通过Input file upload 图片到canvas 中进行剪裁,react 可以引入react-avatar-editor对图片进行剪裁 react-avatar-editor的使用 & ...
- LeetCode46. Permutations
Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] O ...
- 基于 win7下虚拟机的 GNSS-SDR安装过程
最近在安装 GNSS-SDR软件时,遇到了很多问题,这里回顾了我的安装过程,罗列了所遇到的问题和解决办法.希望后来者不要再踩这些坑了! 首先,在官方文档中看到,GNSS-SDR目前并不支持直接在 Wi ...
- flask实现基于elasticsearch的关键词搜索建议
1.实现效果 2.fuzzy模糊查询和suggest查询 fuzzy模糊查询 GET chaxun/job/_search { "query": { "fuzzy&quo ...
- django+xadmin在线教育平台(七)
4-3 新建项目 Python2.7 创建虚拟环境. mkvirtualenv mxonline2 安装django pip install django==1.9.8 注意Python2下此处必须用 ...
- System.gc()日志分析
打开日志:运行配置---XX:+PrintGCDetails 示例程序: package com.test; public class Test { private Object instance = ...
- 【Mysql】给mysql配置远程登录
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option; flush privileges ...
- css页面出现滚动条左右跳动
问题描述:页面首次加载的时候内容是一屏,不会出现纵向滚动条,但是当点击加载的内容更多时页面会出现左右跳动一下的情况.出现跳动的主要原因就是出现了滚动条,滚动条的宽度影响了内容区域的宽度. 1.查看导航 ...
- thinkphp5控制器向+vue的data里传值
传一维数组传值 $array=['id'=>40,"cat_name"=>"明星产品"]; $MenuCats_info=json_encode($ ...
- Linux下 VI 编辑器操作
VI编辑器的三种模式:命令模式.输入模式.末行模式. 1.命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外两种模式,同时无论在何种模式下,[Esc]键都可以回到命令模式.在命 ...