poj 1523 SPF(双连通分量割点模板)
题目链接:http://poj.org/problem?id=1523
题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块。
题目分析:割点用tarjan算法求出来,对于每个割点,dfs一次图,求出有几块不连通的子图。
AC代码:
#include<cstdio>
#include<cstring>
const int N=+;
struct EDGE{
int v,next;
}edge[N*N/];
int first[N],low[N],dfn[N],cut[N],vis[N];
int g,ans,rt,son,cnt,sum;
int min(int a,int b)
{
return a<b?a:b;
}
int max(int a,int b)
{
return a>b?a:b;
}
void AddEdge(int u,int v)
{
edge[g].v=v;
edge[g].next=first[u];
first[u]=g++;
}
void Tarjan(int u)
{
int i,v;
low[u]=dfn[u]=++cnt;
for(i=first[u];i!=-;i=edge[i].next)
{
v=edge[i].v;
if(!dfn[v])
{
Tarjan(v);
low[u]=min(low[u],low[v]);
if(u==rt)
son++;
else
{
if(low[v]>=dfn[u])
cut[u]=true;
}
}
else
low[u]=min(low[u],dfn[v]);
}
}
void dfs(int u)
{
vis[u]=;
for(int i=first[u];i!=-;i=edge[i].next)
{
int v=edge[i].v;
if(!vis[v])
dfs(v);
}
}
int main()
{
int t=,u,v,n,i,p;
while(scanf("%d",&u)&&u)
{
t++;
n=-;
memset(first,-,sizeof(first));
memset(cut,false,sizeof(cut));
memset(dfn,,sizeof(dfn));
g=cnt=sum=;
n=max(n,u);
scanf("%d",&v);
n=max(n,v);
AddEdge(u,v);
AddEdge(v,u);
while(scanf("%d",&u)&&u)
{
scanf("%d",&v);
n=max(n,u);
n=max(n,v);
AddEdge(u,v);
AddEdge(v,u);
}
for(i=;i<=n;i++)
{
if(!dfn[i])
{
rt=i;
son=;
Tarjan(i);
if(son>)
cut[rt]=true;
}
}
printf("Network #%d\n",t);
for(i=;i<=n;i++)
{
if(cut[i])
{
sum++;
ans=;
memset(vis,,sizeof(vis));
vis[i]=;
for(p=first[i];p!=-;p=edge[p].next)
{
v=edge[p].v;
if(!vis[v])
{
dfs(v);
ans++;
}
}
printf(" SPF node %d leaves %d subnets\n",i,ans);
}
}
if(sum==)
printf(" No SPF nodes\n");
printf("\n");
}
return ;
}
poj 1523 SPF(双连通分量割点模板)的更多相关文章
- POJ 1523 SPF tarjan求割点
SPF Time Limit: 1000MS Memory Limit ...
- POJ 1523 SPF(求割点)
题目链接 题意 : 找出图中所有的割点,然后输出删掉他们之后还剩多少个连通分量. 思路 : v与u邻接,要么v是u的孩子,要么u是v的祖先,(u,v)构成一条回边. //poj1523 #includ ...
- POJ 1523 SPF (去掉割点能形成联通块的个数)
思路:使用tarjan算法求出割点,在枚举去掉每一个割点所能形成的联通块的个数. 注意:后来我看了下别的代码,发现我的枚举割点的方式是比较蠢的方式,我们完全可以在tarjan过程中把答案求出来,引入一 ...
- poj 1523 SPF 无向图求割点
SPF Description Consider the two networks shown below. Assuming that data moves around these network ...
- Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
历时好几天,终于完工了! 支持无向图四种功能:1.割点的求解 2.割边的求解 3.点双连通分量的求解 4.边双连通分量的求解 全部支持重边!!!!全部支持重边!!!!全部支持重边!!!! 测试数据: ...
- POJ 1523 SPF (无向图割点)
<题目链接> 题目大意: 给你一个连通的无向图,问你其中割点的编号,并且输出删除该割点后,原图会被分成几个连通分量. 解题分析: Tarjan求割点模板题. #include <cs ...
- POJ 3352 (边双连通分量)
题目链接: http://poj.org/problem?id=3352 题目大意:一个连通图中,至少添加多少条边,使得删除任意一条边之后,图还是连通的. 解题思路: 首先来看下边双连通分量的定义: ...
- POJ 1523 SPF (割点,连通分量)
题意:给出一个网络(不一定连通),求所有的割点,以及割点可以切分出多少个连通分量. 思路:很多种情况. (1)如果给的图已经不是连通图,直接“ No SPF nodes”. (2)求所有割点应该不难 ...
- zoj 1119 / poj 1523 SPF (典型例题 求割点 Tarjan 算法)
poj : http://poj.org/problem?id=1523 如果无向图中一个点 u 为割点 则u 或者是具有两个及以上子女的深度优先生成树的根,或者虽然不是一个根,但是它有一个子女 w, ...
随机推荐
- 给浏览器和各种软件配置 http https socks5 代理 proxy
只需要像在 idea 里一样,配置好sr的本地代理ip:127.0.0.1 本地代理端口:1080 浏览器和软件的流量即可走 sr ,就能被 sr 代理了 用上代理之后,确实快了好多,这里是在打开 ...
- CSS快速入门-代码目录
我们写python代码或者其他代码的时候,发现文件会越来越多,这时候你就觉得有必要把代码文件进行整理了. 对代码整理的整理主要思路: 1.按功能(比如:可执行程序文件.数据库文件.视图文件) 2.按类 ...
- 'javac' 不是内部或外部命令,也不是可运行的程序 或批处理文件.
如果你只需要使用javac命令不需要如此复杂的!! 你先把你自己新建的JAVA_HOME.CLASSPATH这两个变量和PATH变量中的JAVA_HOME%\bin;%JAVA_HOME%\jre\b ...
- 阿里云centos7.4安装并部署svn1.10.0版本(配置多仓库,加入开机自启动)
如何安装最新版本 1.10.0: 如果已安装旧版本,先卸载 yum remove subversion* 查看当前可安装的版本 yum list | grep subversion 可以去官网下载安装 ...
- 正确配置 debian squeeze apt 源
本想在 Debian Squeeze 上安装一些依赖,没想到刚执行 apt-get update ,就出现这样的错误信息. W: GPG error: http://mirrors.163.com s ...
- 琴声不等式--jensen
(来自百度百科) 1. 凹函数,不加权 2. 凹函数,加权 3. 凸函数,不加权 4. 凸函数,加权 应用 在EM算法Q函数的推导中,用到了第二个不等式(凹函数,加权)
- Swagger本地环境配置
一.技术背景 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远.而前后端的唯一联系便是 API 接口,与此同 ...
- IDA入门笔记
题目来源: 南邮CTF :: RE :: Hello,RE(应该是) XDUCTF :: ??? :: ????????(不知道不知道不知道) 总而言之我会在百度网盘再上传一份: >>百度 ...
- 笨办法学Python - 习题1: A Good First Program
在windows上安装完Python环境后,开始按照<笨办法学Python>书上介绍的章节进行练习. 习题 1: 第一个程序 第一天主要是介绍了Python中输出函数print的使用方法, ...
- Binary Tree的3种非Recursive遍历
Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' valu ...