POJ 1523 SPF(求割点)
题意 : 找出图中所有的割点,然后输出删掉他们之后还剩多少个连通分量。
思路 : v与u邻接,要么v是u的孩子,要么u是v的祖先,(u,v)构成一条回边。
//poj1523
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std ; int edge[][],dfn[],low[],subnet[] ;
int tot,Node ,son; void dfs(int u)
{
dfn[u] = low[u] = ++tot ;
for(int v = ; v <= Node ; v++)
{
if(edge[u][v])
{
if(!dfn[v])
{
dfs(v) ;
low[u] = min(low[v],low[u]) ;
if(low[v] >= dfn[u])
{
if(u != )//非根节点
subnet[u] ++ ;
else son ++ ;
}
}
else
{
low[u] = min(low[u],dfn[v]) ;
}
}
}
} void Init()
{
tot = son = Node = ;
memset(dfn,,sizeof(dfn)) ;
memset(low,,sizeof(low)) ;
memset(subnet,,sizeof(subnet)) ;
memset(edge,,sizeof(edge)) ;
}
int main()
{
int m,n ;
int casee = ;
while(scanf("%d",&m) && m)
{
scanf("%d",&n) ;
Init() ;
Node = max(m,max(n,Node)) ;
edge[m][n] = edge[n][m] = ;
while(~scanf("%d",&m) && m)
{
scanf("%d",&n) ;
Node = max(m,max(n,Node)) ;
edge[m][n] = edge[n][m] = ;
}
// if(casee > 1)
// puts("") ;
printf("Network #%d\n",casee ++) ;
dfs() ;
if(son > )
subnet[] = son - ;
int flag = ;
for(int i = ; i <= Node ; i++){
if(subnet[i])
{
flag = ;
printf(" SPF node %d leaves %d subnets\n",i,subnet[i]+) ;
}
}
if(!flag)
puts(" No SPF nodes") ;
puts("") ;
}
return ;
}
POJ 1523 SPF(求割点)的更多相关文章
- POJ 1523 SPF 求割点的好(板子)题!
题意: 给个无向图,问有多少个割点,对于每个割点求删除这个点之后会产生多少新的点双联通分量 题还是很果的 怎么求割点请参考tarjan无向图 关于能产生几个新的双联通分量,对于每个节点u来说,我们判断 ...
- 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, ...
随机推荐
- [转]linux时间同步
转自:http://www.jotop.com/2012/vpsinfo_0525/439.html 美国的vps大多都是国外的时间,让我们的程序总是不适应.那么如何调整linux的时间为北京时间?修 ...
- Object-c 语法 - NSObject常用方法和反射
NSObject常用方法 - (BOOL)isKindOfClass:(Class)aClass //判断是否为aClass或者aClass的子类的实例,aClass可以通过[类名 class]获取 ...
- 51nod 1109 01组成的N的倍数
用01 组成 N的最小倍数 这个BFS搜索就好. 类似这道: ZOJ Problem Set - 1530 每次 要么是0 要么是1, 记入余数,和前驱. #include<bits/stdc ...
- 用C语言实现的扑克牌洗牌程序
一副牌:54张 从0开始排序: 0-12表示黑桃 A 1,2,3,... 10,J,Q,K 13-25表示红桃 A 1,2,3,... 10,J,Q,K 26-38表示草花 A 1,2,3,... ...
- EF之外键Include() left join
项目中用EF实现外键查询出的数据, 查询数量正确, 但实现返回数据集数量不对 //DbContext.cs HasRequired(s => s.ClassRoom) .WithMany() . ...
- iptables的recent模块
看到文章中用recent模块控制对主机的访问. 配置方法如下: iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -j LOG ...
- Asp.net将图片转为Base64编码
protected void Page_Load(object sender, EventArgs e) { Image img = new Bitmap(Server.MapPath("/ ...
- 在windows下用eclipse + pydev插件来配置python的开发环境
在windows下用eclipse + pydev插件来配置python的开发环境 一.安装 python 可以到网上下个Windows版的python,官网为:https://www.python. ...
- git创建和删除远程分支
问题描述: 使用git创建和删除远程分支 问题解决: (1)git创建本地分支 注: 如上所示,使用命令 git branch -a ...
- hdu 4858 项目管理 图的分块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能 ...