POJ 1523 SPF(割点所割连通分量数)
来源:互联网 发布:威联通nas网络存储 编辑:程序博客网 时间:2024/05/01 12:17
POJ 1523 SPF(割点所割连通分量数)
http://poj.org/problem?id=1523
题意:
给你一个无向图,问你该图中有多少割点.且每个割点能把该图分为几个连通分量
分析:
本题与POJ 2117很类似,也是用cut[i]数组来计数i节点所能割的儿子数.(不过注意:对于根节点,如果它不是割点,那么cut[i]==0而不是-1了),具体分析完全可以参考POJ 2117:
http://blog.csdn.net/qq_36782366/article/details/77540498
注意:该题中cut数组记录的是这个结点如果断开,那么会生成多少连通分量而不是像上题一样记录的是增加多少连通分量,此题默认一开始是一个无向连通图。所以只有真正的割点其cut值才非0,如果i点不是割点.那么cut[i]==0.(不会存在-1的情况)
对于非根节点的割点,它能分割图为cut[i]+1个连通分量(他的子树加上他的祖先),对于根节点割点,它能分割图为cut[i]个连通分量
AC代码:
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;const int maxn=10000+10;int n,m;vector<int> G[maxn],ans;int cut[maxn];int low[maxn];int pre[maxn];int dfs_clock;int tarjan(int u,int fa){ int lowu= pre[u]=++dfs_clock; int child=0; for(int i=0;i<G[u].size();i++) { int v=G[u][i]; if(!pre[v])//子节点 且没有计算过 { child++; int lowv=tarjan(v,u); lowu=min(lowv,lowu); if(lowv>=pre[u]) cut[u]++; } else if(pre[v]<pre[u] && v!=fa)//计算过 且有反向边 lowu = min(lowu,pre[v]); } if(fa<0){if(child>=2)ans.push_back(u);}else if(cut[u]>=1){cut[u]++;ans.push_back(u);} return low[u]=lowu;}int main(){int cas=1; while(~scanf("%d",&n)&&n) { dfs_clock=0; memset(cut,0,sizeof(cut)); memset(pre,0,sizeof(pre)); for(int i=1;i<=1000;i++) G[i].clear(); ans.clear(); while(1) { scanf("%d",&m); G[n].push_back(m); G[m].push_back(n);scanf("%d",&n);if(n==0)break; } for(int i=1;i<=1000;i++)if(!pre[i]&&G[i].size()>0) { tarjan(i,-1); } printf("Network #%d\n",cas++); sort(&ans[0],&ans[0]+ans.size()); if(ans.size()==0)printf(" No SPF nodes\n");else for(int i=0;i<ans.size();i++) { printf(" SPF node %d leaves %d subnets\n",ans[i],cut[ans[i]]); } printf("\n"); } return 0;}
阅读全文
0 0
- POJ 1523 SPF(割点所割连通分量数)
- POJ 1523 SPF(割点所割连通分量数)
- POJ 1523 SPF(割点所割连通分量数)
- [割点] poj 1523 SPF
- POJ-1523 SPF 割点
- 【POJ】1523 SPF 割点
- POJ - 1523 SPF(割点)
- POJ--1523 SPF(割点)
- POJ 1523 SPF【割点】
- POJ 1523 SPF 割点
- POJ 1523 SPF (割点)
- Poj 1523 SPF(割点 + tarjan算法)
- TOJ 2018 POJ 1523 SPF / 割点
- POJ 1523 SPF(割点)
- POJ-1523 SPF (割点[Tarjan])
- POJ 1523 SPF (割点)
- POJ 1523 SPF 割边与割点
- 割点、割边、强连通分量
- bzoj3172 [Tjoi2013]单词(SA+暴力,类似bzoj2754)
- 股谚:会买是徒弟会卖才是师傅 学会这3种万能卖出法再不用愁
- 手动获取spring的application和bean属性
- Java琐碎知识整理
- Bmob后端云上传多张图片
- POJ 1523 SPF(割点所割连通分量数)
- Eclipse搭建Spring应用
- POJ 1236 Network of Schools [强连通分量]
- 机器学习实战K-近邻算法遇到的几个错误
- 【51Nod1201】整数划分
- iOS UITapGestureRecognizer区分单击和双击
- xlistview的分页加载简单版
- 绑定
- 设计模式C++版:第十七式原型模式