POJ 1523 网络连通
题目大意:
给你一个网络组,每台机子与其他机子的关系,让你找到所有的割点,如果没有割点,输出无
这道题目就是最直接的求割点问题,我在这里用的是邻接矩阵来存储机子之间的关系
割点问题的求解需要对深度优先搜索序数有比较好的理解
dfn[]用于存储当前的优先搜索序数,low[]存储当前点通过子节点或是回路所能达到的最小优先搜索序数
当(u,v)一组边dfn[u]<=low[v]时,那么u就是一个割点(这是u不作为树的顶点时的情况)
u作为顶点时,也即dfn[u]==1时,要看u的儿子节点数,大于等于2个时也说明它是割点
总体代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 1002
#define min(a,b) a<b?a:b;
#define max(a,b) a>b?a:b;
int edge[N][N],low[N],dfn[N],subnets[N],son,visit[N],tmpdfn,n,flag;//flag标志这个图是否能找到割点 void init()
{
memset(visit,,sizeof(visit));
memset(subnets,,sizeof(subnets));
visit[]=,low[]=,dfn[]=,son=,tmpdfn=;
}
void dfs(int u)//dfs函数要进行递归,所以不在里面进行初始化操作
{
for(int i=;i<=n;i++){
if(edge[u][i]){
if(!visit[i]){
tmpdfn++;
visit[i]=;
low[i]=dfn[i]=tmpdfn;
dfs(i);
low[u]=min(low[u],low[i]);//回退的时候,找祖先节点u能达到的较小的low值
if(low[i]>=dfn[u]){
if(u!=) subnets[u]++;
else son++;
}
}
else low[u]=min(low[u],dfn[i]);//这时候i是u的祖先节点,且这是一条回边
}
}
}
int main()
{
int u,v,cnt=;
while(scanf("%d",&u)&&u!=){
flag=,n=;
cnt++;//来统计网络个数
scanf("%d",&v);
n=max(n,u);
n=max(n,v);
memset(edge,,sizeof(edge));
edge[u][v]=,edge[v][u]=;
while(scanf("%d",&u)&&u!=){
scanf("%d",&v);
n=max(n,u);
n=max(n,v);
edge[u][v]=,edge[v][u]=;
}
printf("Network #%d\n",cnt);
init();
dfs();
if(son>) subnets[]=son-;
for(int i=;i<=n;i++){
if(subnets[i]){
flag=;
printf(" SPF node %d leaves %d subnets\n",i,subnets[i]+);
}
}
if(flag==) printf(" No SPF nodes\n");
printf("\n");
}
return ;
}
POJ 1523 网络连通的更多相关文章
- 判断是否网络连通 .net Ping
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题
Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...
- Dockers(29)- 网络连通
网络连通 背景 基于docker0建了两个容器tomcat01和tomcat02,网段位于172.12.0.0/16 我们又新建了一个网络,网段为192.168.0.0/16,基于此网段新建了两个容器 ...
- poj 1523 SPF【点双连通求去掉割点后bcc个数】
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7246 Accepted: 3302 Description C ...
- poj 1523 SPF(双连通分量割点模板)
题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点 ...
- POJ 1523 (割点+连通分量)
题目链接:http://poj.org/problem?id=1523 题目大意:连通图,找图中割点,并计算切除该割点后,图中的连通分量个数. 解题思路: POJ的数据很弱. Tarjan法求割点. ...
- POJ 1523 SPF (割点,连通分量)
题意:给出一个网络(不一定连通),求所有的割点,以及割点可以切分出多少个连通分量. 思路:很多种情况. (1)如果给的图已经不是连通图,直接“ No SPF nodes”. (2)求所有割点应该不难 ...
- zoj 1119 /poj 1523 SPF
题目描述:考虑图8.9中的两个网络,假定网络中的数据只在有线路直接连接的2个结点之间以点对点的方式传输.一个结点出现故障,比如图(a)所示的网络中结点3出现故障,将会阻止其他某些结点之间的通信.结点1 ...
- POJ 1523 SPF 割点与桥的推断算法-Tarjan
题目链接: POJ1523 题意: 问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分 题解: Tarjan 算法模板题 顺序遍历整个图,能够得到一棵生成树: 树边:可理解为在DFS过 ...
随机推荐
- DNS练习之正向解析
配置正向解析: 主机名:sishen63 主机IP:192.168.1.63 操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago) 安 ...
- 移动端UI自动化Appium测试——Android系统下使用uiautomator viewer查找元素
在利用Appium做自动化测试时,最重要的一步就是获取对应的元素值,根据元素来对对象进行对应的操作,如何获得对象元素呢?Appium Server Console其实提供了一个界面对话框&qu ...
- 【转】码云source tree 提交超过100m 为什么大文件推不上去
码云source tree 提交超过100m 为什么大文件推不上去 2017年01月12日 16:50:51 阅读数:7634 git -c diff.mnemonicprefix=false -c ...
- PMP项目管理学习笔记(3)——过程框架
所有项目,不论大小,都可以分解为过程组: 如果项目规模很大,可以分阶段管理,每个阶段都要经过上面的五个过程组,从启动到收尾. 阶段的类型: 顺序阶段: 一个阶段完成后进入下个阶段. 重叠阶段: 有时需 ...
- Animate.css_css3动画库介绍
插件描述:Animate.css内置了很多典型的css3动画,兼容性好使用方便. Animate.css是一个有趣的,跨浏览器的css3动画库.很值得我们在项目中引用. 用法 1.首先引入animat ...
- c++调用com口操作autocad
#include "stdafx.h" #include <atlcomcli.h> #import "D:\\C++test\\FirstCom\\Rele ...
- 获取指定点的RGB值
实现效果: 知识运用: Color对象的RGB属性 实现代码: private void button1_Click(object sender, EventArgs e) { OpenFileDia ...
- dos command
dos command md 创建目录 rd 删除目录 cd\ 返回到根目录 cd.. 返回到上一级目录 cd 进入指定目录 dir 列出当前目录下的文件夹及文件 echo 文件内容>文件名称. ...
- Sql Server 中锁的概念(2)
1.一般大家都对事务的四种隔离模式比较熟悉,从松到严依次是: - 读取未提交(Read uncommitted):处于此模式下可能会出现脏读.幻象读.不可重复读 - 读取已提交(Read commit ...
- ASP.NetCore 错误 NU1605 检测到包降级: Microsoft.Data.Sqlite 从 2.2.1 降级到 2.1.0
找到使用的.csproj文件 将 <PackageReference Include="Microsoft.Data.Sqlite" Version="2.1.0& ...