poj 1523 求割点
思路:对于所有节点,每次找的子树,key[root]++;输出时,对于根节点就输出key[root],对于其它节点i,输出key[i]+1;
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#define Maxn 1010
#define Maxm Maxn*10
#define inf 0x7fffffff
using namespace std;
int dfn[Maxn],low[Maxn],index[Maxn],vi[Maxn],n,e,lab,key[Maxn],flag=;
struct Edge{
int to,next,val,from;
}edge[Maxm];
void init()
{
memset(dfn,,sizeof(dfn));
memset(key,,sizeof(key));
for(int i=;i<=Maxn-;i++)
low[i]=inf;
memset(index,-,sizeof(index));
memset(vi,,sizeof(vi));
e=lab=flag=;
}
void addedge(int from, int to)
{
edge[e].from=from;
edge[e].to=to;
edge[e].next=index[from];
index[from]=e++;
edge[e].to=from;
edge[e].from=to;
edge[e].next=index[to];
index[to]=e++;
}
void dfs(int u)
{
dfn[u]=lab++;
vi[u]=;
int i,temp;
for(i=index[u];i!=-;i=edge[i].next)
{
temp=edge[i].to;
if(!vi[temp])
dfs(temp);
}
}
void find(int u)
{
int i,j,temp;
vi[u]=;
for(i=index[u];i!=-;i=edge[i].next)
{
int temp=edge[i].to;
if(!vi[temp])
{
find(temp);
if(low[temp]>=dfn[u])
{
key[u]++;
flag=;
}
low[u]=min(low[temp],low[u]);
low[u]=min(low[u],dfn[u]);
} low[u]=min(low[u],dfn[temp]);
}
}
int main()
{
int i,j,m,a,b,Case=;
while(scanf("%d",&a),a)
{
init();
scanf("%d",&b);
addedge(a,b);
while(scanf("%d",&a),a)
{
scanf("%d",&b);
addedge(a,b);
}
dfs();
memset(vi,,sizeof(vi));
vi[]=;
for(i=index[];i!=-;i=edge[i].next)
{
int temp=edge[i].to;
if(!vi[temp])
{
find(temp);
key[]++;
}
}
printf("Network #%d\n",Case++);
if(key[]>=)
{
printf(" SPF node %d leaves %d subnets\n",,key[]);
flag=;
}
if(!flag)
printf(" No SPF nodes\n");
else
for(i=;i<=;i++)
{
if(key[i])
printf(" SPF node %d leaves %d subnets\n",i,key[i]+);
}
printf("\n");
}
return ;
}
poj 1523 求割点的更多相关文章
- poj 1523求割点
题意:给出一个无向图,求割点以及去除这个点后图分为几部分: 思路:割点定义:去掉该点后图将分成几个部分.割点:(1)当k为根节点且有>1个分支,则去除该点后图便被分成几个分支.(2)DFN[v] ...
- poj 1523 求割点把一个图分成几个联通部分
#include<stdio.h> #include<string.h> #define N 1100 struct node { int u,v,next; }bian[N* ...
- Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题
Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...
- POJ 1523 SPF 割点 Tarjan
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9317 Accepted: 4218 Description C ...
- POJ 1523 SPF (割点,连通分量)
题意:给出一个网络(不一定连通),求所有的割点,以及割点可以切分出多少个连通分量. 思路:很多种情况. (1)如果给的图已经不是连通图,直接“ No SPF nodes”. (2)求所有割点应该不难 ...
- poj 1144(求割点个数)
题目链接:http://poj.org/problem?id=1144 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根结点并且它的子女个数大于等于2,则v是割点.2.如果点v不是根结点,并 ...
- POJ 1523 SPF 割点与桥的推断算法-Tarjan
题目链接: POJ1523 题意: 问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分 题解: Tarjan 算法模板题 顺序遍历整个图,能够得到一棵生成树: 树边:可理解为在DFS过 ...
- POJ 1144 Network(无向图连通分量求割点)
题目地址:id=1144">POJ 1144 求割点.推断一个点是否是割点有两种推断情况: 假设u为割点,当且仅当满足以下的1条 1.假设u为树根,那么u必须有多于1棵子树 2.假设u ...
- poj 1523 SPF(tarjan求割点)
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
随机推荐
- Spring Object/XML mapping example
In this tutorial, we will extend last Maven + Spring hello world example by adding JDBC support, to ...
- Oracle & Sun
2010s January 27, 2010: Oracle acquires Sun Microsystems.
- UI进阶 数据加密
一.数据安全 在互联网发展趋势迅猛的今天,数据安全的重要性日趋凸显.也成为我们必须了解的互联网知识.在移动互联网浪潮下,用户的资金安全.企业的信息安全都是我们实际开发中必须考虑的内容.
- android Studio gradle so的加载
最近在使用Android Studio开发android项目,我的项目是由gradle构建的,gradle的优势文档上有说明,当你不断使用中,我越来越发现,太TMD方便啦,优势大大的明显. 打包,功能 ...
- MFC 应用、模板、框架、文档、视图 的关系
从该对象 如何访问其他对象 全局函数 调用全局函数AfxGetApp可以得到CWinApp应用类指针 应用 AfxGetApp()->m_pMainWnd为框架窗口指针:用CWinApp::Ge ...
- C#关于静态与非静态的区别
C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...
- python的random模块
As an example of subclassing, the random module provides the WichmannHill class that implements an a ...
- 添加zlib压缩步骤 OpenSSL
1.Link Binary With Libraries 中添加 libz.dyllb 2.复制OpenSSL(libssl.a & libcryto.a & NSData+Cocoa ...
- linux自己带的apache重新启动
如果是linux自己带的apache的话就使用命令 service httpd start 启动 service httpd stop 关闭 service httpd restart 重新启动 如果 ...
- 关于打包android自己编写的第三方library提供jar
最近公司要求把应用的接口写成sdk提供给别人使用,写好了之后,发现导出来jar包怎么使用也有误,在运行时会报java.lang.NoClassDefFoundError的错,于是纠结了很久,突然在博客 ...