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过 ...
随机推荐
- 关于C++虚函数表的那些事儿
前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有“多种形态”,这是一种泛 ...
- Hadoop3.0新特性
1. Hadoop3.0简介 Hadoop 2.0是基于JDK 1.7开发的,而JDK 1.7在2015年4月已停止更新,这直接迫使Hadoop社区基于JDK1.8重新发布一个新的Hadoop版本,而 ...
- Ruby 基础教程 1-2
1.数组 创建 arrayname=[] arrayname=["1",12,"23"] 访问 arrayname[index] 更新 arrayname[in ...
- vs找不到lib以及编译的link过程中出现的问题
1.#pragma comment 程序中已经通过该语句完成lib库的引入,如果再在input里面添加lib库就会报错: 2.要在general的“导入外部库”的设置选项的目录下面添加引用到的lib库 ...
- android分析windowManager、window、viewGroup之间关系(二)
三.接上一节,分析windowManager中添加一个悬浮框的方式,首先看代码 WindowManager.LayoutParams params = new LayoutParams(); para ...
- [JSON].getObj( keyPath )
语法:[JSON].getObj( keyPath ) 返回:[JSON] 说明:返回指定键名路径的JSON对象,指定键名路径不存在时返回空的toJson对象(强烈建议使用 [JSON].exists ...
- JSP页面中文乱码问题
$.get()方法到服务器端中文乱码 在jsp页面使用encodeURI(“中文”),在服务器端进行解码 String name = req.getParameter("name" ...
- 简析@Resource 和 @Autowired的区别
@Autowird @Autowird 属于spring框架,默认使用类型(byType)进行注入,例如下面代码: @Autowired public IUserService userService ...
- 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)
[SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...
- html5 canvas绘制环形进度条,环形渐变色仪表图
html5 canvas绘制环形进度条,环形渐变色仪表图 在绘制圆环前,我们需要知道canvas arc() 方 ...