求割点 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编号.没有两个地点有相同的号码. ...
随机推荐
- Unity4.3 bug GetChild顺序错乱
历史原因,目前有个项目还在使用unity4.3版本,比较过不同Unity版本,发现unity4.3的 transform.GetChild 获取的child顺序并不是想要的. 测试代码 using U ...
- Java8 Lambda表达式和流操作如何让你的代码变慢5倍
原文出处:ImportNew 有许许多多关于 Java 8 中流效率的讨论,但根据 Alex Zhitnitsky 的测试结果显示:坚持使用传统的 Java 编程风格——iterator 和 for- ...
- 迭代器和for-of循环 顺便带一下Es5中的.map遍历
let set = new Set(); //set方法去除重复的数据 [1, 2, 3, 4, 2, 8, 4].map(function (elem) { set.add(elem); //遍历完 ...
- 04Spring_bean 后处理器(后处理Bean),BeanPostProcessor ,bean创建时序,动态代理
这篇文章很重要,讲解的是动态代理,以及bean创建前后的所发生的事情.介绍一个接口:在Spring构造Bean对象过程中,有一个环节对Bean对象进行 后处理操作 (钩子函数) ----- Sprin ...
- MVC中如何设置路由指定默认页
MVC中怎么设置默认页,在webform中 只要右键设置起始页就可以,但MVC中却没有这个功能,其实MVC更简单 如下: Login是控制器,Index 是动作 在全局Global.asax中改动下即 ...
- Windows 8.1 应用开发 – 触控操作
与WPF相同Windows 8.1应用中也具有高级触控操作(Manipulation),其中包含了三种常见的触屏手势:平移.缩放.旋转,通过以下四种事件可为控件实现各种触控操作:Manipulatio ...
- maven buid 导出项目依赖的jar包问题
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:copy-dependencie ...
- Cordova - 使用Cordova开发iOS应用实战1(配置、开发第一个应用)
Cordova - 使用Cordova开发iOS应用实战1(配置.开发第一个应用) 现在比较流行使用 html5 开发移动应用,毕竟只要写一套html页面就可以适配各种移动设备,大大节省了跨平台应用的 ...
- java的守护线程与非守护线程
最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ,(PS:以 ...
- 如何获取Flickr图片链接地址作为外链图片
Flickr,雅虎旗下图片分享网站.为一家提供免费及付费数位照片储存.分享方案之线上服务,也提供网络社群服务的平台.其重要特点就是基于社会网络的人际关系的拓展与内容的组织.这个网站的功能之强大,已超出 ...