poj 1523求割点
题意:给出一个无向图,求割点以及去除这个点后图分为几部分;
思路:割点定义:去掉该点后图将分成几个部分。割点:(1)当k为根节点且有>1个分支,则去除该点后图便被分成几个分支。(2)DFN[v]<Low[j]表示v的子节点不会有回路回到v的祖先。
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define MAXN 1005
#define MAXM 1005*1005
struct Edge
{
int to,next;
}edge[MAXM];
int Low[MAXN],DFN[MAXN],first[MAXN],son,vis[MAXN];
int n,count,cut[MAXN],tot,root;
void addedge(int v,int w)
{
edge[tot].to=w;
edge[tot].next=first[v];
first[v]=tot++;
}
void Tarjan(int v)
{
DFN[v]=Low[v]=++count;
for(int i=first[v];i!=-1;i=edge[i].next)
{
int j=edge[i].to;
if(!DFN[j])
{
Tarjan(j);
if(root==v)
{
son++;
if(son>1)
cut[v]=1;
}
else
{
Low[v]=min(Low[j],Low[v]);
if(DFN[v]<=Low[j])cut[v]=1;
}
}
else
{
Low[v]=min(Low[v],DFN[j]);
}
}
}
void dfs(int u)
{
vis[u]=1;
for(int i=first[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if(!vis[v])
{
dfs(v);
}
}
}
int main()
{
int x,y,t=0;
while(scanf("%d",&x),x)
{
t++;
memset(DFN,0,sizeof(DFN));
memset(first,-1,sizeof(first));
memset(Low,0,sizeof(Low));
memset(cut,0,sizeof(cut));
n=0;
scanf("%d",&y);
addedge(x,y);
addedge(y,x);
n=max(x,y);
count=0;
while(scanf("%d",&x),x)
{
scanf("%d",&y);
addedge(x,y);
addedge(y,x);
n=max(x,y);
} son=0;
root=1;
Tarjan(1);
printf("Network #%d\n",t);//cout<<1111<<endl;
int ans=0;
int flag=0;
for(int i=1;i<=n;i++)
{
if(cut[i]==1)
{
flag=1;
memset(vis,0,sizeof(vis));
vis[i]=1;
int son1=0;
for(int j=first[i];j!=-1;j=edge[j].next)
{
int k=edge[j].to;
if(!vis[k])
{
dfs(k);
son1++;
}
}
printf(" SPF node %d leaves %d subnets\n",i,son1);
}
} if(!flag)
printf(" No SPF nodes\n");
printf("\n");
}
return 0;
}
poj 1523求割点的更多相关文章
- poj 1523 求割点
思路:对于所有节点,每次找的子树,key[root]++;输出时,对于根节点就输出key[root],对于其它节点i,输出key[i]+1; #include<iostream> #inc ...
- poj 1523 求割点把一个图分成几个联通部分
#include<stdio.h> #include<string.h> #define N 1100 struct node { int u,v,next; }bian[N* ...
- 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
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9317 Accepted: 4218 Description C ...
- POJ 1523 SPF (割点,连通分量)
题意:给出一个网络(不一定连通),求所有的割点,以及割点可以切分出多少个连通分量. 思路:很多种情况. (1)如果给的图已经不是连通图,直接“ No SPF nodes”. (2)求所有割点应该不难 ...
- poj 1144(求割点个数)
题目链接:http://poj.org/problem?id=1144 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根结点并且它的子女个数大于等于2,则v是割点.2.如果点v不是根结点,并 ...
- POJ 1523 SPF 割点与桥的推断算法-Tarjan
题目链接: POJ1523 题意: 问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分 题解: Tarjan 算法模板题 顺序遍历整个图,能够得到一棵生成树: 树边:可理解为在DFS过 ...
- POJ 1144 Network(无向图连通分量求割点)
题目地址:id=1144">POJ 1144 求割点.推断一个点是否是割点有两种推断情况: 假设u为割点,当且仅当满足以下的1条 1.假设u为树根,那么u必须有多于1棵子树 2.假设u ...
- poj 1523 SPF(tarjan求割点)
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
随机推荐
- nopCommerce 3.9 大波浪系列 之 可退款的支付宝插件(上)
一.简介 nop通过插件机制可以支持更多的支付扩展,我们通过编写支持退款的支付宝插件来更好的理解支付插件的扩展. 先分享下支付宝插件源码点击下载,由于时间原因,本篇只介绍使用该插件,下一篇结合插件进行 ...
- sort排序错乱问题
对于sort排序 之前就遇到过这种问题 不过没有在意 今天遇到 就找了一下原理 在这种sort排序中可以看到排序几乎没有什么问题 就是5比较特殊 会在20是的后面 ~ sort()方法开始的时候会 ...
- jquery实现多条件筛选特效代码分享
本文实例讲述了jquery实现多条件筛选特效.分享给大家供大家参考.具体如下:jquery实现的多条件搜索表单带日期选择表格表单效果源码,是一段实现了多个条件筛选搜索的特效代码,多条件拥有时间.地点. ...
- IntelliJ IDEA javaDoc的使用
文档注释的风格看个人主要说一下在idea中如何配置和使用快捷的文档注释 1.想像Eclipse一样使用 /**来写文档注释可以通过settings下的Live Templates来设置如下图所示 ja ...
- .NET Core 2.0和ASP.NET Core 2.0正式版抢先体验
.NET Core 2.0和ASP.NET Core 2.0正式版抢先体验 .NET Standard 2.0 is final Broad platform support. .NET Standa ...
- getComputedStyle方法获取元素CSS值
javascript的style属性只能获取内联样式,对于外部样式和嵌入式样式需要用currentStyle属性.但是,currentStyle在FIrefox和Chrome下不支持,需要用getCo ...
- 分辨率验证工具 - 【Window Resizer】的使用 - Google扩展工具
# 今天在Firefox上面安装"The Addon Bar"未果,于是转战Google了 # 想说的是http://cn.bing.com/ 简直太好用了 软件名称:Window Resizer 安 ...
- 关于"软件评测师"
参考书目 <软件评测师考试考点分析与真题详解>http://item.taobao.com/item.htm?spm=a1z09.2.9.82.qx67QK&id=18924026 ...
- 安装mvn,jdk,rocketmq
附一个rocketmq各语言客户端仓库:https://github.com/apache/incubator-rocketmq-externals,我用go客户端,但是master分支的go没有pr ...
- ueditor单独调用上传附件和图片的功能
javascript富文本编辑器使我们添加.编辑网站中的文章更加方便和容易.这些富文本编辑器提供了所见即所得(What You See Is What You Get - WYSIWYG)的功能,可以 ...