POJ 1523 SPF (无向图割点)
<题目链接>
题目大意:
给你一个连通的无向图,问你其中割点的编号,并且输出删除该割点后,原图会被分成几个连通分量。
解题分析:
Tarjan求割点模板题。
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++)
#define clr(i,a) memset(i,a,sizeof(i))
const int N = ;
int head[N], cnt, rt, add_block[N], dfn[N], low[N], fa[N], tot;
struct Edge{
int to, next;
}e[N*N];
inline int read(){
int r=, f=; char c=getchar();
for(; c<''||c>''; c=getchar()) if(c=='-')f=-;
for(; c>=''&&c<=''; c=getchar()) r=r*+c-'';
return f*r;
}
void add(int u, int v) {
e[++cnt].next=head[u]; head[u]=cnt; e[cnt].to=v;
e[++cnt].next=head[v]; head[v]=cnt; e[cnt].to=u;
}
void tarjan(int u, int fa) {
dfn[u]=low[u]=++tot;
int child=;
for(int i=head[u];~i; i=e[i].next) {
int v=e[i].to;
if(!dfn[v]) {
tarjan(v, u);
++child;
if(low[v]>=dfn[u])++add_block[u]; //add_block代表删除u后能够增加的分量个数
low[u]=min(low[v], low[u]);
}
else if(dfn[v]<dfn[u] && fa!=v)low[u]=min(low[u], dfn[v]);
}
if(child== && fa==-) add_block[u]=; //如果
else if(child> && fa==-) add_block[u]=child-;
} int main() {
int u, v, ncase=;
while(true) {
u=read(); if(u==) break;
v=read();
clr(head, -); clr(add_block, ); cnt=tot=; clr(dfn, ); clr(low, );
add(u, v);rt=max(rt, v);
while() {
u=read(); if(u==) break;
v=read();
add(u, v); rt=max(rt, v); //rt用来记录序号最大的节点
}
rep(i, , rt) if(head[i]!=- && !dfn[i]) tarjan(i, -);
int flag=;
printf("Network #%d\n", ++ncase);
rep(i, , rt) if(add_block[i])
printf(" SPF node %d leaves %d subnets\n", i, add_block[i]+), flag=;
if(!flag) puts(" No SPF nodes");
puts("");
}
return ;
}
2018-12-02
POJ 1523 SPF (无向图割点)的更多相关文章
- poj 1523 SPF 无向图求割点
SPF Description Consider the two networks shown below. Assuming that data moves around these network ...
- POJ 1523 SPF 求割点的好(板子)题!
题意: 给个无向图,问有多少个割点,对于每个割点求删除这个点之后会产生多少新的点双联通分量 题还是很果的 怎么求割点请参考tarjan无向图 关于能产生几个新的双联通分量,对于每个节点u来说,我们判断 ...
- poj 1523 SPF 求割点以及删除该割点后联通块的数量
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7136 Accepted: 3255 Description C ...
- zoj 1119 / poj 1523 SPF (典型例题 求割点 Tarjan 算法)
poj : http://poj.org/problem?id=1523 如果无向图中一个点 u 为割点 则u 或者是具有两个及以上子女的深度优先生成树的根,或者虽然不是一个根,但是它有一个子女 w, ...
- poj 1523"SPF"(无向图求割点)
传送门 题意: 有一张联通网络,求出所有的割点: 对于割点 u ,求将 u 删去后,此图有多少个联通子网络: 对于含有割点的,按升序输出: 题解: DFS求割点入门题,不会的戳这里
- poj 1523 SPF(双连通分量割点模板)
题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点 ...
- 【POJ】1523 SPF(割点)
http://poj.org/problem?id=1523 太弱... too weak.. 割点我都还要看书和看题解来写..果然是写不出么.. 割点就那样求,然后分量直接这个节点有多少子树就有子树 ...
- POJ 1523 SPF tarjan求割点
SPF Time Limit: 1000MS Memory Limit ...
- POJ 1523 SPF(求割点)
题目链接 题意 : 找出图中所有的割点,然后输出删掉他们之后还剩多少个连通分量. 思路 : v与u邻接,要么v是u的孩子,要么u是v的祖先,(u,v)构成一条回边. //poj1523 #includ ...
随机推荐
- PID控制器开发笔记之六:不完全微分PID控制器的实现
从PID控制的基本原理我们知道,微分信号的引入可改善系统的动态特性,但也存在一个问题,那就是容易引进高频干扰,在偏差扰动突变时尤其显出微分项的不足.为了解决这个问题人们引入低通滤波方式来解决这一问题. ...
- Confluence 6 配置数字格式
在 Confluence 中使用了 2 种数字格式: 整形数字格式.例如: ############### 小数数字格式.例如:###############.########## Confluenc ...
- Confluence 6 管理插件和组件
一个 组件(add-on)是与 Confluence 分开安装的功能,能够加强 Confluence 的功能和使用.插件(plugin)和 组件(add-on)这 2 个词通常是一起使用的. 一共有 ...
- Vue.js结合vue-router和webpack编写单页路由项目
一.前提 1. 安装了node.js. 2. 安装了npm. 3. 检查是否安装成功: 打开cmd,输入node,没有报“node不是内部或外部命令”表示安装成功node.js. 打开cmd,输入np ...
- jquery 中多选和全选
- 利用map和stringstream数据流解题
题目描述 喜闻乐见A+B.读入两个用英文表示的A和B,计算它们的和并输出. 输入 第一行输入一个字符串,表示数字A:第二行输入一个字符串表示数字B.A和B均为正整数. 输出 输出一个正整数n,表示A+ ...
- 对一个元素 同时添加单击onclick 和 双击ondblclick 触发冲突的解决
需求说明:单击列表项内容后,吧啦吧啦,双击列表项内容后,巴拉巴拉巴拉~~~ 解决思路:卧槽 ,其实我是没思路的,当时唯一的想法就是,看个人点击鼠标的速度了,双击快一点,触发双击事件ლ(′◉❥◉`ლ), ...
- js----常用功能
切割 1. a="ddd" a.substr(0,1) 通过js找子代 document.getElementByClass("ddd").getElement ...
- OAuth2 token
1.资源服务器 package com.ruhuanxingyun.config; import com.fasterxml.jackson.databind.ObjectMapper; import ...
- linux下mysql源码安装
参考链接:http://blog.csdn.net/zqtsx/article/details/9378703 下载mysql安装包, 不会下载点这里 地址:ftp://mirror.switch.c ...