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过 ...
随机推荐
- cakephp2.x 一个ajax例子.md
CakePHP中的ajax还是比较简单,但要注意一些细节. app/View/Layouts下新建ajaxtest.ctp <!DOCTYPE html PUBLIC "-//W3C/ ...
- 抽样分布(2) t分布
定义 t分布 设X ~ N(0,1),Y ~ χ2(n),且X,Y相互独立,则称随机变量 服从自由度为n的t分布(学生氏分布) 记为 t~t(n),其概率密度为 由于tn(x)是偶函数,其图形关于y轴 ...
- php session存入redis
php的会话默认以文件的形式存在,可以配知道NOSQL中,既可以提高访问速度又能好好的实现回话共享,在后期做负载均衡时实现多台服务器session 同步也是比较方便: 一:在php配置文件中改 修改p ...
- Navicat 导入sql脚本文件
Navicat 导入sql脚本文件 我在组建自己工作用的数据库时要导入.sql脚本文件,用cmd窗口导入太慢,navicat的导入向导里又无导入sql脚本的选项, 但不是navicat中没有导入sql ...
- 通过 Python_Faker 生成测试数据
通过 Python_Faker 生成测试数据 一.介绍 在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,你不可能通过手工来生成(最傻的方法)可能 ...
- C 计算员工工资
#include <stdio.h> int main(int argc, char **argv) { //定义四个变量 g每小时固定的工资 40 固定工作时间 pay工资 hours员 ...
- DP动态规划练习
先来看一下经典的背包问题吧 http://www.cnblogs.com/Kalix/p/7617856.html 01背包问题 https://www.cnblogs.com/Kalix/p/76 ...
- JDK源码分析:Integer.java部分源码解析
1)声明部: public final class Integer extends Number implements Comparable<Integer> extends Number ...
- Python3 深浅拷贝
一 定义 在Python中对象的赋值其实就是对象的引用.当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已. 浅拷贝: 浅拷贝值只拷贝一层,具有自 ...
- 互评Alpha版本——Thunder团队
基于NABCD评论作品 Hello World! :http://www.cnblogs.com/120626fj/p/7807544.html 欢迎来怼 :http://www.cnblogs.co ...