求割点 poj 1523
给你一些双向边 求有多少个割点 并输出去掉点这个点 去掉后有几个联通分量
Tarjan
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h> using namespace std; #define MAXN 1000
int head[MAXN+],dfn[MAXN+],low[MAXN+],z[MAXN+];
int cnt,num; struct edg
{
int to,next; }x[]; void add(int u,int v)
{
x[cnt].next=head[u];
x[cnt].to=v;
head[u]=cnt++;
}
void dfs(int u,int k)
{
int i;
dfn[u]=low[u]=k;
for(i=head[u];i!=-;i=x[i].next)
{
if(!dfn[x[i].to]) //没访问过 x[i].to孩子节点
{
dfs(x[i].to,k+);
low[u]=min(low[u],low[x[i].to]);
if(low[x[i].to]>=dfn[u]) //不能跳过这个点 去掉后 必然多一个
z[u]++;
}
else
low[u]=min(low[u],dfn[x[i].to]); //访问过 x[i].to 是父亲节点
}
}
int main()
{
int n,m,ca,m1;
ca=; while(scanf("%d",&n)!=EOF&&n)
{
m1=;
memset(head,-,sizeof(head));
memset(z,,sizeof(z));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
scanf("%d",&m);
m1=max(n,m);
add(n,m),add(m,n); int a,b;
while(scanf("%d",&a)!=EOF&&a)
{
scanf("%d",&b);
m1=max(m1,a);
m1=max(m1,b);
add(a,b),add(b,a);
}
dfs(,); /考虑 1 是根 数组搞出来要减1
z[]--;
if(ca!=)
printf("\n");
printf("Network #%d\n",ca++);
int ok=; for(int i=;i<=m1;i++)
{
if(z[i]>)
{
printf(" SPF node %d leaves %d subnets\n",i,z[i]+); 去掉该点以下的联通分量 上面还有一半
ok=;
}
}
if(ok==)
printf(" No SPF nodes\n");
} return ;
}
/*
Network #1
SPF node 3 leaves 2 subnets
*/
求割点 poj 1523的更多相关文章
- Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题
Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...
- poj 1523 SPF(tarjan求割点)
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- poj 1523求割点
题意:给出一个无向图,求割点以及去除这个点后图分为几部分: 思路:割点定义:去掉该点后图将分成几个部分.割点:(1)当k为根节点且有>1个分支,则去除该点后图便被分成几个分支.(2)DFN[v] ...
- poj 1523"SPF"(无向图求割点)
传送门 题意: 有一张联通网络,求出所有的割点: 对于割点 u ,求将 u 删去后,此图有多少个联通子网络: 对于含有割点的,按升序输出: 题解: DFS求割点入门题,不会的戳这里
- POJ 1523 SPF 求割点的好(板子)题!
题意: 给个无向图,问有多少个割点,对于每个割点求删除这个点之后会产生多少新的点双联通分量 题还是很果的 怎么求割点请参考tarjan无向图 关于能产生几个新的双联通分量,对于每个节点u来说,我们判断 ...
- POJ 1523 (割点+连通分量)
题目链接:http://poj.org/problem?id=1523 题目大意:连通图,找图中割点,并计算切除该割点后,图中的连通分量个数. 解题思路: POJ的数据很弱. Tarjan法求割点. ...
- poj 1523 SPF(双连通分量割点模板)
题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点 ...
- POJ 1144 Network(Tarjan求割点)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12707 Accepted: 5835 Descript ...
- poj 1144 (Tarjan求割点数量)
题目链接:http://poj.org/problem?id=1144 描述 一个电话线公司(简称TLC)正在建立一个新的电话线缆网络.他们连接了若干个地点分别从1到N编号.没有两个地点有相同的号码. ...
随机推荐
- Unity 碰撞器
Unity引擎的碰撞器 常见的有Box Collider,Capsule Collider等等 IsTrigger(触发器) 在这些碰撞器中有一个属性 Is Trigger(是否使用触发器) 触发器事 ...
- java 22 - 13 多线程之解决线程安全问题的实现方式2
上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ; Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 ...
- ubuntu为用户增加sudoer权限的两种方法
方法一.使用usermod命令 新增user sudo adduser username 增加sudo权限 sudo usermod -aG sudo username sudo usermod -a ...
- iOS远程推送1
一.APNS 远程推送 1.所有的苹果设备,在联网状态下,都会与苹果服务器建立长连接. 2.长连接:就是只要联网了,就一直建立连接. 3.长连接的作用:时间校准,系统升级,查找我的iPhone. 4. ...
- XMAPP配置
F:\xmapp\apache\conf\extra httpd-vhosts.conf peizhi##<VirtualHost *:80> ## DocumentRoot " ...
- 启动Eclipse后卡在 android sdk content loader 的解决办法
Make sure that eclipse is not active. If it is active kill eclipse from the processes tab of the tas ...
- Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例
概要 这一章,我们对TreeSet进行学习.我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet.内容包括:第1部分 TreeSet介绍第2部分 TreeSe ...
- Shell脚本语法
索引 1. 第一行必须是"#!/bin/sh" 2. 注释:一行开头为 # 3. 定义变量 4. 逻辑符号 5. 接收参数 6. 控制流:if/then/elif/else/f ...
- Dynamics CRM 2016 的新特性
新版本CRM (2016 with update 0.1) 发布已有几个月了,总结一下新特性,从几个方面来看: 1. 针对整合功能的新特性 (1) 增加了CRM App for Outlook. 这个 ...
- 玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)
前文 的最后给出了玉伯的一道课后题,今天我们来讲讲这题的思路. 题目是这样的: Number.MAX_VALUE + 1 == Number.MAX_VALUE; Number.MAX_VALUE + ...