POJ1144.Network——无向图的割点
来源:互联网 发布:java递归排序问题 编辑:程序博客网 时间:2024/05/17 06:32
http://poj.org/problem?id=1144
题目描述:
TLC 电话线路公司正在新建一个电话线路网络。他们将一些地方(这些地方用1 到N 的整数标明,任何2 个地方的标号都不相同)用电话线路连接起来。这些线路是双向的,每条线路连接2 个地方,并且每个地方的电话线路都是连接到一个电话交换机。每个地方都有一个电话交换机。从每个地方都可以达到其他一些地方(如果有线路连接的话),然而这些线路不一定必须是直接连接的,也可以是通过几个电话交换机到达另外一个地方。但是有时会因为电力不足导致某个地方的交换机不能工作。TLC 的官员意识到一旦出现这种情况(在某个地方的交换机不工作,即这个结点与其他结点之间的线路都断开了),除了这个出现故障的地方是不可达外,还可能导致其他一些(本来连通的)地方也不再连通。称这个地方为关节点。
现在TLC 的官员努力想写一个程序来找到关节点的数目。请帮助他们
分析:
求割点的数目
//164K 16MS C++#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>#define rep(i,n) for(int i=0;i<(n);++i)#define rep1(i,a,b) for(int i=(a);i<(b);++i)#define For(i,n) for(int i=0;i<=(n);++i)#define For1(i,a,b) for(int i=(a);i<=(b);++i)#define clr(a,b) memset(a,b,sizeof(a))const int MAXN=110;const int MAXM=10010;using namespace std;int low[MAXN],dfn[MAXN];bool iscut[MAXN];struct Edge{ int to,next;}edge[MAXM];int head[MAXN],tot;void addedge(int u,int v){ edge[tot].to=v; edge[tot].next=head[u]; head[u]=tot++;}void init(){ tot=0; clr(head,0xff);}void dfs(int u,int pre,int dth){ int v; low[u]=dfn[u]=dth; int son=0; for(int i=head[u];i!=-1;i=edge[i].next){ v=edge[i].to; if(v==pre) continue; if(!dfn[v]){ son++; dfs(v,u,dth+1); if(low[u]>low[v]) low[u]=low[v]; if(low[v]>=dfn[u]){ iscut[u]=true; } } else if(low[u]>dfn[v]) low[u]=dfn[v]; } if(pre<0&&son==1) iscut[u]=false;}void solve(int n){ clr(dfn,0); clr(iscut,false); For1(i,1,n){ if(!dfn[i]) dfs(i,-1,1); } int ans=0; For1(i,1,n){ if(iscut[i]) ans++; } printf("%d\n",ans);}int main(){#ifndef ONLINE_JUDGEfreopen("in.cpp","r",stdin);#endif // ONLINE_JUDGE int N,u,v; while(scanf("%d",&N)==1){ if(N==0) break; init(); int n=-1; while(scanf("%d",&u)&&u){ n=max(n,u); while(getchar()!='\n'){ scanf("%d",&v);n=max(n,v); addedge(u,v); addedge(v,u); } } solve(n); } return 0;}
0 0
- POJ1144.Network——无向图的割点
- ZJU1311 Network - 无向图的割点
- poj1144——割点
- POJ2117.Electricity——无向图的割点
- POJ1144-求图的割点(裸)
- poj1144 求图的割点
- poj1144 求图的割点--模板
- POJ1144——Tarjan+计算割点
- POJ1144 Network(判断割点)
- POJ 1144 Network Tarjan 求无向图的割点的个数 Tarjan 模板题
- 无向图的割点算法
- 39.2 无向图的割点
- POJ 1144 - Network 用tarjan求无向图的割点
- 求无向图的割点 (poj 1144 Network)
- 无向连通图的割点与割边
- 无向图 割点
- POJ1144——Network
- DFS应用——找出无向图的割点
- 【bzoj1040】【ZJOI2008】【骑士】
- 最最最简单的计算器
- C++中两个数值交换的几种方法
- 无处不在的编程思想
- 剑指Offer之 - 替换空格
- POJ1144.Network——无向图的割点
- 第八周项目三:分数类中的运算符重载(一)
- 将log4net封装在类库中的方法
- CF540E
- leetcode--House Robber
- 如何应对云攻击评估云安全控制是关键
- Jquery仿淘宝购物车
- hdu4221 Greedy?(贪心)
- 队列的数组实现