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

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. 异常总结<经典例题>

    public class Test1 { public static void main(String[] args) { try { add(1); System.out.println(" ...

  2. 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!

    网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...

  3. PHP的文件操作常用函数

    PHP文件操作 1 获得文件名:basename - 返回路径中的文件名部分 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被 ...

  4. Java之单例模式

    单例模式: public class Person{ public static Person per//定义一个静态变量,用来储存当前类的对象 private Person()//构造方法私有化 { ...

  5. 网络流-最大流问题 ISAP 算法解释(转自Renfei Song's Blog)

    网络流-最大流问题 ISAP 算法解释 August 7, 2013 / 编程指南 ISAP 是图论求最大流的算法之一,它很好的平衡了运行时间和程序复杂度之间的关系,因此非常常用. 约定 我们使用邻接 ...

  6. Net中HttpClient 重试

    /// <summary>         /// 重试         /// </summary>         public class RetryHandler : ...

  7. two sample ttest & paired ttst

    来源:http://www.pinzhi.org/thread-1023-1-1.html 成对t检验Paired Test是对来自同一总体的样本,在不同条件影响下获取的2组样本进行分析,以评价不同条 ...

  8. swift 集合类型(二)

    说到swift的集合类型,就不得不谈到Dictionary.包含一个键值对组合的集合. var air = ["name":"warner","tit ...

  9. Handler 消息传递机制

    1,Handler 的概念Handler 是用来干什么的?1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器 2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一 ...

  10. Linux 网络编程详解五(TCP/IP协议粘包解决方案二)

    ssize_t recv(int s, void *buf, size_t len, int flags); --与read相比,只能用于网络套接字文件描述符 --当flags参数的值设置为MSG_P ...