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过 ...
随机推荐
- dangerouslySetHTML 和 style 属性
这一节我们来补充两个之前没有提到的属性,但是在 React.js 组件开发中也非常常用,但是它们也很简单. dangerouslySetHTML 出于安全考虑的原因(XSS 攻击),在 React.j ...
- Spring-bean(二)
命名空间 自动装配 bean之间的关系:继承:依赖 使用外部属性文件 SpEL bean的生命周期 bean的后置处理器 (一)util命名空间 当用list,set等集合时,不能将集合作为独立的be ...
- ["1", "2", "3"].map(parseInt)
为什么["1", "2", "3"].map(parseInt) 为 1,NaN,NaN; parseInt() parseInt() 函数 ...
- MongoDB部署、使用、监控及调优
MongoDB部署 系统环境:CentOS7 下载地址:http://mirrors.163.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD ...
- 【Jenkins】Jenkins配置从节点,实现远程主机调用功能
一.需求 使用Jenkins进行持续集成部署过程中,需要用到远端主机的处理功能.如部署到远程主机.文件备份等功能 二.思路 1.当远端主机为Linux系统时使用Publish Over SSH Plu ...
- Smart SVN的使用
最近项目使用了SVN,为管理代码起到了很好的作用!但是,对于很多初步使用着,还是非常不容易! 公司使用的是Smart SVN 客户端. Smart SVN 这个工具总体还是挺不错的! 在代码的提交和获 ...
- HEVC标准介绍+论文阅读笔记
脱离视频编解码.投入计算机视觉一年,这个博客也歇业一年,最近偷些时间回顾一下编解码,毕竟花费了整个研一的时间(虽然这一年基本上在上课). 之前写过几篇H.264标准的几篇介绍文章,详见:http:// ...
- 使用原生JavaScript模拟getElementByClassName .
最近在工作中,由于有一个插件必须使用jquery-pack.js,而这个包又是非常古老的jquery,所以又的函数是无法使用的,例如$()选择器以及parent()都取不到标签的内容. 所以没办法,只 ...
- 入门Promise的用法
new Promise(function(resolve,reject){ resolve(); //数据处理完成 reject(); //数据处理出错 }).then(function A(){ / ...
- COGS 1570. [POJ3461]乌力波
★☆ 输入文件:oulipo.in 输出文件:oulipo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 法国作家乔治·佩雷克(Georges Perec,1 ...