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过 ...
随机推荐
- 使用css3 制作switch开关
使用css3来实现switch开关的效果: html代码: <!--switch开关--><div class="switch-btn"> <inpu ...
- 清理xcode缓存
code版本:8.3.3 iOS版本:10.3.2 移除 Xcode 运行安装 APP 产生的缓存文件(DerivedData) 只要重新运行Xcode就一定会重新生成,而且会随着运行程序的增多,占用 ...
- 【HEVC帧间预测论文】P1.3 Fast Inter-Frame Prediction Algorithm of HEVC Based on Graphic Information
基于图形信息的HEVC帧间预测快速算法/Fast Inter-Frame Prediction Algorithm of HEVC Based on Graphic Information <H ...
- SEO 第二章
SEO第二章 1. 掌握搜索引擎工作原理(重点) 2. 了解百度算法 3. 关键词的分类 一.什么是搜索引擎? 搜索引擎是用来实现搜索服务的,说白了搜索引擎也属于一种网站. 浏览器是用来加载网站 ...
- 事件捕获 & 事件冒泡
<body> <div id="div1"> <div id="div2"> <div id="div3&q ...
- 总结vue2.0 配置的实例方法
总结vue2.0 配置的实例方法 http://www.php.cn/js-tutorial-369603.html
- <Spring Cloud>入门六 Zuul
1.Zuul 2.操作 2.1 pom <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- ubuntu中执行docker info出现警告信息WARNING: No memory limit support 或 WARNING: No swap limit support
docker info 指令报若下错误:WARNING: No memory limit support 或WARNING: No swap limit support 解决方法: 1.打开/etc/ ...
- kvm客户机存储方式
前面介绍了存储的配置和qemu-img工具来管理镜像,在QEMU/KVM中,客户机镜像文件可以由很多种方式来构建,其中几种如下: 1) 本地存储的客户机镜像文件. 2) 物理磁盘或磁盘分区. 3) L ...
- 深入Linux内核架构——进程虚拟内存
逆向映射(reverse mapping)技术有助于从虚拟内存页跟踪到对应的物理内存页: 缺页处理(page fault handling)允许从块设备按需读取数据填充虚拟地址空间. 一.简介 用户虚 ...