POJ 1523 SPF
大意:求割顶的数量以及删除割顶之后子图的数量。
思路:Tarjan算法求割顶,同POJ 1144 NetWork.
CODE1:
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int MAXN = 100010;
const int MAXM = 500010;
struct Edge
{
int v, next;
}edge[MAXM];
int dfn[MAXN], low[MAXN], sub[MAXN];
int first[MAXN];
int N, M;
int cnt, tot;
int u, v;
void read_graph(int u, int v)
{
edge[cnt].v = v;
edge[cnt].next = first[u], first[u] = cnt++;
}
void init()
{
cnt = 0;
tot = 0;
memset(first, -1, sizeof(first));
memset(dfn, 0, sizeof(dfn));
}
void read_graph2()
{
scanf("%d", &v);
read_graph(u, v);
read_graph(v, u);
N = max(N, max(u, v));
while(scanf("%d", &u) && u)
{
scanf("%d", &v);
read_graph(u, v);
read_graph(v, u);
N = max(N, max(u, v));
}
}
void tarjan(int u)
{
dfn[u] = low[u] = ++tot;
for(int e = first[u]; e != -1; e = edge[e].next)
{
int v = edge[e].v;
if(!dfn[v])
{
tarjan(v);
low[u] = min(low[u], low[v]);
if(dfn[u] <= low[v]) sub[u]++;
}
low[u] = min(low[u], dfn[v]);
}
}
void solve(int root)
{
for(int i = 1; i <= N; i++) sub[i] = (i == root)? 0:1; //直接将根节点赋值为0
tarjan(root);
int flag = 0;
for(int i = 1; i <= N; i++)
{
if(sub[i] > 1)
{
flag = 1;
printf(" SPF node %d leaves %d subnets\n", i, sub[i]);
}
}
if(!flag)
printf(" No SPF nodes\n");
}
int main()
{
int times = 0;
while(scanf("%d", &u) && u)
{
init();
read_graph2();
if(times) printf("\n");
printf("Network #%d\n", ++times);
solve(1);
}
return 0;
}
CODE2:
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int MAXN = 100010;
const int MAXM = 500010;
struct Edge
{
int v, next;
}edge[MAXM];
int dfn[MAXN], low[MAXN], sub[MAXN];
int first[MAXN];
int N, M;
int cnt, tot;
int u, v;
int root = 1;
inline void read_graph(int u, int v)
{
edge[cnt].v = v;
edge[cnt].next = first[u], first[u] = cnt++;
}
inline void init()
{
cnt = 0;
tot = 0;
memset(first, -1, sizeof(first));
memset(dfn, 0, sizeof(dfn));
}
inline void read_graph2()
{
scanf("%d", &v);
read_graph(u, v);
read_graph(v, u);
N = max(N, max(u, v));
while(scanf("%d", &u) && u)
{
scanf("%d", &v);
read_graph(u, v);
read_graph(v, u);
N = max(N, max(u, v));
}
}
inline void Tarjan(int u, int fa)
{
int rootson = 0;
low[u] = dfn[u] = ++tot;
for(int e = first[u]; e != -1; e = edge[e].next)
{
int v = edge[e].v;
if(!dfn[v])
{
if(u == root) //处理根节点。
{
if(++rootson > 1) sub[u]++;
}
Tarjan(v, u);
low[u] = min(low[u], low[v]);
if(u != root && dfn[u] <= low[v]) sub[u]++; //根节点已经被处理过。
}
low[u] = min(low[u], dfn[v]);
}
}
inline void solve()
{
int flag = 0;
for(int i = 1; i <= N; i++) sub[i] = 1;
Tarjan(root, -1);
for(int i = 1; i <= N; i++)
{
if(sub[i] > 1)
{
flag = 1;
printf(" SPF node %d leaves %d subnets\n", i, sub[i]);
}
}
if(!flag) printf(" No SPF nodes\n");
}
int main()
{
int times = 0;
while(scanf("%d", &u) && u)
{
init();
read_graph2();
if(times) printf("\n");
printf("Network #%d\n", ++times);
solve();
}
return 0;
}
转载于:https://www.cnblogs.com/g0feng/archive/2012/11/03/2752321.html
POJ 1523 SPF相关推荐
- poj 1523 SPF (无向图 的 割点)
http://poj.org/problem?id=1523 题意: 求 无向图的 个点,以及 将个点 去掉后 图 被分成 几个联通块: 题解: tarjan . 1 #include ...
- POJ 1523 SPF 割点与桥的推断算法-Tarjan
题目链接: POJ1523 题意: 问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分 题解: Tarjan 算法模板题 顺序遍历整个图,能够得到一棵生成树: 树边:可理解为在DFS过 ...
- POJ 1523 SPF (割点 点双连通分量)
题意:求出割点以及除去割点后的连通分量的数量(附带求出了点双连通分量(块)) [求割点]对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号.定义Low(u)为u或u的子树 ...
- 【POJ - 1523】SPF(Tarjan求割点,求分割成的连通块数,模板题,tricks)
题干: Consider the two networks shown below. Assuming that data moves around these networks only betwe ...
- POJ 1523 (割点+连通分量)
题目链接: http://poj.org/problem?id=1523 题目大意:连通图,找图中割点,并计算切除该割点后,图中的连通分量个数. 解题思路: POJ的数据很弱. Tarjan法求割点. ...
- poj 1523(无向联通图的割点)
结合tarjan算法思想,这题终于写了出来. 同样用dfs将图变成为一颗树,这样可以提供许多有用的性质. 对于一个无向连通图,dfs后的树为只有回边(回边Euv,v是u的祖先)和生成树的边的图. 那么 ...
- [无向图割点] PKU 1523 SPF
targan算法. 1 # include <cstdio> 2 # include <cstring> 3 4 # define N (1000 + 5) 5 6 int n ...
- 【Q】【poj 1144】【poj 1523】
割点问题 题目类型相同,于是放到一起写.套了个版就可以了. 贴出版吧,方便查找. void dfs(int k, int fa){ int j, i, son = 0; vis[k] ...
- 是否有HTML整洁化的插件,让所有的浏览器都能识别HTML5标签样式的小插件
如今HTML5愈来愈引发大家的关注了,但目前支持HTML5的浏览器还不是主流,特别是国内用户近50%以上仍旧使用IE6,由于支持HTML5的IE9不支持Xp系统安装,这样未来很长一段时间,HTML5的 ...
最新文章
- lwip之数据收发流程_1
- Windows上的音频采集技术
- pt-osc原理、限制、及与原生online-ddl比较
- spring javaee_JavaEE还是Spring? 都不行! 我们呼吁新的竞争者!
- 深度神经网络关键词解释
- java split函数_Java split函数
- UIActionSheet的最后一项点击失效
- hadoop2.7.3用mapreduce计算pi值
- Python实践通过使用XGBoost中的尽早停止【Early Stopping】策略来避免过度拟合
- 世界顶级黑市拳赛内幕
- 施努卡:锂电池电芯底面和侧板的压胶面积
- 矩阵奇异值分解(详解)
- Springboot集成Screw生成数据库表结构文档
- Markdown编辑器使用-yellowcong
- Datawhale组队学习NLP之transformer Task 01
- 谷歌浏览器插入百度翻译插件
- 设计模式——中介模式
- linux系统删除lammps任务,Linux 的常用命令
- 信息系统项目管理师 - 项目立项管理
- Cast from pointer to smaller type 'int' loses information”
热门文章
- Windows Server 2008 R2之管理Sysvol文件夹
- jaquery ready
- 闲话WPF之二六(WPF性能优化点)
- 【Linux】【通信】1.ping不通
- Ubuntu上安装nginx步骤及问题记录
- js---html元素操作
- 不得不爱开源 Wijmo jQuery 插件集(4)-【手风琴效果】(附页面展示和源码)
- 终于来热风了,又一次感觉到什么叫温暖!
- GUI(一) 一些自已看的东西
- 【Android 逆向】Android 逆向工具 ( Apktool | IDA | Python )