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 ------------------------------------------------------------ ...
随机推荐
- HTML5基本知识点
一.什么是HTML HTML是超文本标签语言,即网页的源码.而浏览器就是翻译解释HTML源码的工具. 二.HTML的基本格式 <!DOCTYPE html>: ①文档类型声明:让浏览器按照 ...
- 压缩[SCOI2007]
题目描述 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前 ...
- 全面理解Javascript中Promise
全面理解Javascript中Promise 最近在学习Promise的时候,在网上收集了一些资料,发现很多的知识点不够系统,所以小编特意为大家整理了一些自认为 比较好的文章,供大家更好地学习js中非 ...
- NET中解决KafKa多线程发送多主题的问题
一般在KafKa消费程序中消费可以设置多个主题,那在同一程序中需要向KafKa发送不同主题的消息,如异常需要发到异常主题,正常的发送到正常的主题,这时候就需要实例化多个主题,然后逐个发送. 在NET中 ...
- mysqli数据库连接
/* * 连接数据库的mysqli函数库 * 使用的是过程化的风格编码 */header('content-type:text/html;charset=utf-8');// 获取数据库连接$link ...
- Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
引言:大家都知道“效率”是数据库中非常重要的一个指标,如何提高效率大家可能都会想起索引,但索引又这么多种,什么场合应该使用什么索引呢?哪种索引可以提高我们的效率,哪种索引可以让我们的效率大大降低(有时 ...
- 搭建 keras + tensorflow
每次搭建深度学习环境的总要搜索各类参考. 这次搭环境,自己做个记录.这样以后搭建环境就拿自己 的文章做主线索引. (如果参照我的博客安装的,欢迎转载分享 ) 1. 安装操作系统 (ubuntu-1 ...
- HTML颜色代码表/颜色名(网摘)
HTML颜色代码表 原文出处:[颜色代码] HTML颜色名 source link: http://www.runoob.com/html/html-colornames.html
- asp.net 开发 sql server 转 oracle
前段时间我们公司项目 要把sql server 转oracle 分享一下心得 也记录一下问题 开始我研究了一段时间 然后下载了 oracle 11g 版本 和 PL/SQL(客户端) 和sql ser ...
- Orleans---持久化
Orleans配置---持久化 这是Orleans系列文章中的一篇.首篇文章在此 Grain理想的生命周期应该如下图所示: 这就如美国电影中的大反派一样,死了再复活,死了再复活.当然如果复活的反派没有 ...