POJ1523:SPF——题解
http://poj.org/problem?id=1523
这题明显就是求割点然后求割完之后的强连通分量的个数。
割点都会求,怎么求割完的分量个数呢?
我们可以通过万能的并查集啊!(具体做法看代码吧,方法不好叙述)
这样我们查割点它所连的点一共隶属于几个集合即可。
(PS:读入方式很恶心,同时请注意快速读入)
#include<stack>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
inline int read(){
int x=,w=;char ch=;
while(ch<''||ch>''){if(ch=='-')w=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*w;
}
const int maxn=;
bool dis[maxn][maxn];
bool cut[];
int dfn[maxn];
int low[maxn];
int fa[maxn];
int from[maxn];
int t;
int big[maxn];
int to[maxn];
int find(int a){
if(a==fa[a])return a;
return fa[a]=find(fa[a]);
}
void tarjan(int u,int f){
bool tong[maxn]={};
from[u]=f;
t++;
dfn[u]=t;
low[u]=t;
to[t]=u;
for(int v=;v<=maxn;v++){
if(dis[u][v]){
if(!dfn[v]){
tarjan(v,u);
low[u]=min(low[u],low[v]);
}else if(f!=v){
low[u]=min(low[u],dfn[v]);
}
}
fa[find(u)]=find(to[low[u]]);
}
for(int v=;v<=maxn;v++){
if(dis[u][v]){
if(!tong[find(v)]){
tong[find(v)]=;
big[u]++;
}
}
}
return;
}
int main(){
int u,v;
int cnt=;
bool smg=;
while(){
int u=read();
if(!u&&!smg)break;
smg=;
if(!u){
for(int i=;i<=maxn;i++)fa[i]=i;
tarjan(,);
int rootson=;
bool ok=;
for(int i=;i<=maxn;i++){
int v=from[i];
if(v==)rootson++;
else{
if(low[i]>=dfn[v]&&low[i]&&dfn[i]){
cut[v]=;
ok=;
}
}
}
if(rootson>=){
cut[]=;
ok=;
}
cnt++;
printf("Network #%d\n",cnt);
if(ok==){
printf(" No SPF nodes\n");
}else{
for(int i=;i<=maxn;i++){
if(cut[i])printf(" SPF node %d leaves %d subnets\n",i,big[i]);
}
}
printf("\n");
memset(cut,,sizeof(cut));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(fa,,sizeof(fa));
memset(from,,sizeof(from));
memset(dis,,sizeof(dis));
memset(big,,sizeof(big));
memset(to,,sizeof(to));
t=;
smg=;
continue;
}
int v=read();
dis[u][v]=dis[v][u]=;
}
return ;
}
POJ1523:SPF——题解的更多相关文章
- POJ1523 SPF[无向图割点]
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8139 Accepted: 3723 Description C ...
- POJ1523 SPF 单点故障
POJ1523 题意很简单,求删除割点后原先割点所在的无向连通图被分成了几个连通部分(原题说prevent at least one pair of available nodes from bein ...
- POJ1523 SPF
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8254 Accepted: 3772 Description Consi ...
- POJ1523 SPF(割点模板)
题目求一个无向图的所有割点,并输出删除这些割点后形成几个连通分量.用Tarjan算法: 一遍DFS,构造出一颗深度优先生成树,在原无向图中边分成了两种:树边(生成树上的边)和反祖边(非生成树上的边). ...
- POJ1523:SPF(无向连通图求割点)
题目:http://poj.org/problem?id=1523 题目解析: 注意题目输入输入,防止PE,题目就是求割点,并问割点将这个连通图分成了几个子图,算是模版题吧. #include < ...
- poj 3614(网络流)
Sunscreen Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6672 Accepted: 2348 Descrip ...
- poj图论解题报告索引
最短路径: poj1125 - Stockbroker Grapevine(多源最短路径,floyd) poj1502 - MPI Maelstrom(单源最短路径,dijkstra,bellman- ...
- Tarjan求割点和桥
by szTom 前置知识 邻接表存储及遍历图 tarjan求强连通分量 割点 割点的定义 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多, ...
- POJ 1523 SPF 割点与桥的推断算法-Tarjan
题目链接: POJ1523 题意: 问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分 题解: Tarjan 算法模板题 顺序遍历整个图,能够得到一棵生成树: 树边:可理解为在DFS过 ...
随机推荐
- Linux工作环境搭建
云主机工作环境搭建 网易云主机 需要申请弹性公网IP,不然需要OpenVPN才可以链接. 低于50块钱时,不能进行云主机创建. 更新yum源 cd /etc/yum.repos.d/ mkdir re ...
- ToString的格式化字符串
如下: , , ).ToString(@"d\.hh\:mm\:ss"); var b = DateTimeOffset.Now.ToString("yyyy-MM-dd ...
- linux 安装 node.js
wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gztar zxvf node-v0.10.26.tar.gzcd node-v0.10. ...
- MySQL☞in语句
in语句: 1)列名 in(数值1,数值2,数值3…):求出满足该列的多个列值 格式: select 列名1,列名2 from 表名 where 列名 in (数值1,数值2,数值3...) 如下图 ...
- GIt学习第二天之版本回退、工作区和暂存区
搬运自 ‘廖雪峰的官方网站’ 地址:https://www.liaoxuefeng.com/ 1.版本回退 在Git中,我们用git log命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花 ...
- Linux命令应用大词典-第2章 获取帮助
2.1 help:查看内部Shell命令帮助信息 2.2 man:显示在线手册页 2.3 manpath:查看和设置man手册页的查询路径 2.4 info:阅读info格式的文件 2.5 pinfo ...
- commons-lang源码解析之StringUtils
apache的commons工具包是平时使用最多的工具包之一,对其实现方式需要具体了解.commons-lang version 3.1 empty和blank的区别 StringUtils中判断St ...
- 【QT】常用类
官方文档 doc QWidget QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己. 每一个窗口部件都是矩形的, ...
- vivado使用感想
寒假学了一学期vivado也没有学出什么名堂:为了调试龙芯的五级流水CPU,今天肝了一下午结果还把vivado给摸清楚了,果然是以目标为导向最能出成绩. vivado开发硬件的流程 写代码 模拟仿真s ...
- 系统滴答定时器(SysTick)中断配置
系统滴答定时器(SysTick)中断配置 在STM32标准库中是通过SysTick_Config()函数配置时钟中断的,然后SysTick_Handler()函数自动定时触发其中的函数. if(Sys ...