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 ...
随机推荐
- 纯css使用线性渐变实现滚动进度条(来自于微信前端早读课)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【python】python为何多线程无法切换
写了一个kafka传输消息,celery发布任务的脚本. 有四个线程,分别读取不同的kafka队列信息 问题是,只有第一个线程会启动,剩下的三个线程连start都运行不了. 而且这个问题不是一开始就发 ...
- 【sqli-labs】Less7
Less-7: 输出文件 sql导出文件语句 select * from table_test into outfile 'test.txt' 既然名字是输出文件,那肯定是和文件有关系. 首先,确保s ...
- laravel 迁移枚举
$table->enum('type', ['replace', 'warning'])->comment('类型');
- 去掉A标签的点击选中边框
非IE a:focus { outline:none; }
- C# 把ABCD转换成数字
每倒题得选项可能是多选或者单选. public static string LetterTransformationNum(string answer, int type) { string num ...
- JQuery 标签之间组合取值
<body> <div></div> <input type="text" value="first-1" /> ...
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
- debian 下deb包的制作
http://page.renren.com/601230663/note/817856769?op=next&curTime=1333642042000
- 《深入探索Netty原理及源码分析》文集小结
<深入探索Netty原理及源码分析>文集小结 https://www.jianshu.com/p/239a196152de