给你一些双向边 求有多少个割点 并输出去掉点这个点 去掉后有几个联通分量

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的更多相关文章

  1. Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题

    Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...

  2. poj 1523 SPF(tarjan求割点)

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  3. poj 1523求割点

    题意:给出一个无向图,求割点以及去除这个点后图分为几部分: 思路:割点定义:去掉该点后图将分成几个部分.割点:(1)当k为根节点且有>1个分支,则去除该点后图便被分成几个分支.(2)DFN[v] ...

  4. poj 1523"SPF"(无向图求割点)

    传送门 题意: 有一张联通网络,求出所有的割点: 对于割点 u ,求将 u 删去后,此图有多少个联通子网络: 对于含有割点的,按升序输出: 题解: DFS求割点入门题,不会的戳这里

  5. POJ 1523 SPF 求割点的好(板子)题!

    题意: 给个无向图,问有多少个割点,对于每个割点求删除这个点之后会产生多少新的点双联通分量 题还是很果的 怎么求割点请参考tarjan无向图 关于能产生几个新的双联通分量,对于每个节点u来说,我们判断 ...

  6. POJ 1523 (割点+连通分量)

    题目链接:http://poj.org/problem?id=1523 题目大意:连通图,找图中割点,并计算切除该割点后,图中的连通分量个数. 解题思路: POJ的数据很弱. Tarjan法求割点. ...

  7. poj 1523 SPF(双连通分量割点模板)

    题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点 ...

  8. POJ 1144 Network(Tarjan求割点)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12707   Accepted: 5835 Descript ...

  9. poj 1144 (Tarjan求割点数量)

    题目链接:http://poj.org/problem?id=1144 描述 一个电话线公司(简称TLC)正在建立一个新的电话线缆网络.他们连接了若干个地点分别从1到N编号.没有两个地点有相同的号码. ...

随机推荐

  1. Unity 碰撞器

    Unity引擎的碰撞器 常见的有Box Collider,Capsule Collider等等 IsTrigger(触发器) 在这些碰撞器中有一个属性 Is Trigger(是否使用触发器) 触发器事 ...

  2. java 22 - 13 多线程之解决线程安全问题的实现方式2

    上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ;  Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 ...

  3. ubuntu为用户增加sudoer权限的两种方法

    方法一.使用usermod命令 新增user sudo adduser username 增加sudo权限 sudo usermod -aG sudo username sudo usermod -a ...

  4. iOS远程推送1

    一.APNS 远程推送 1.所有的苹果设备,在联网状态下,都会与苹果服务器建立长连接. 2.长连接:就是只要联网了,就一直建立连接. 3.长连接的作用:时间校准,系统升级,查找我的iPhone. 4. ...

  5. XMAPP配置

    F:\xmapp\apache\conf\extra httpd-vhosts.conf peizhi##<VirtualHost *:80> ## DocumentRoot " ...

  6. 启动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 ...

  7. Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对TreeSet进行学习.我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet.内容包括:第1部分 TreeSet介绍第2部分 TreeSe ...

  8. Shell脚本语法

      索引 1. 第一行必须是"#!/bin/sh" 2. 注释:一行开头为 # 3. 定义变量 4. 逻辑符号 5. 接收参数 6. 控制流:if/then/elif/else/f ...

  9. Dynamics CRM 2016 的新特性

    新版本CRM (2016 with update 0.1) 发布已有几个月了,总结一下新特性,从几个方面来看: 1. 针对整合功能的新特性 (1) 增加了CRM App for Outlook. 这个 ...

  10. 玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)

    前文 的最后给出了玉伯的一道课后题,今天我们来讲讲这题的思路. 题目是这样的: Number.MAX_VALUE + 1 == Number.MAX_VALUE; Number.MAX_VALUE + ...