Network

题意:输入n(n < 100)个点,不一定是连通图,问有多少个割点?

割点:删除某个点之后,图的联通分量增加。

思路:dfs利用时间戳dfs_clock的特性,点u的low函数low[u]代表以u为根的子树所得连到的最"上面"的祖先的时间戳。

即当点u存在一个子节点v,而low[v] >= pre[u]时,u就为割点;u-v即为桥,且割点要在最后判断,不能直接在iscut[] = true;处自增。因为cc_cnt代表的是当前的节点,而该节点可能有多个子节点,这样会导致重复计算。

直接使用了stringstream来读取一行,用了125ms才A.

#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define rep0(i,l,r) for(int i = (l);i < (r);i++)
#define rep1(i,l,r) for(int i = (l);i <= (r);i++)
#define rep_0(i,r,l) for(int i = (r);i > (l);i--)
#define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
#define MS0(a) memset(a,0,sizeof(a))
#define MS1(a) memset(a,-1,sizeof(a)) const int MAXN = ;
int head[MAXN<<],tot;
struct edge{
int to,w,Next;
}e[MAXN<<];
void ins(int a,int b,int w = )
{
e[++tot].Next = head[a];
e[tot].to = b;
e[tot].w = w;
head[a] = tot;
}
int low[MAXN],pre[MAXN],dfs_clock,cc_cnt;
bool iscut[MAXN];
int dfs(int u,int fa)
{
int lowu = pre[u] = ++dfs_clock;
int child = ;
for(int id = head[u];id;id = e[id].Next){
int v = e[id].to;
if(!pre[v]){
child++;
int lowv = dfs(v,u);
lowu = min(lowu,lowv);//以子节点的low来更新u的low函数;
if(lowv >= pre[u]) //表示u-v为桥
iscut[u] = true;
}
else if(v != fa && pre[v] < pre[u])
lowu = min(lowu,pre[v]);
}
if(fa < && child == ) iscut[u] = ;
if(iscut[u]) cc_cnt++;
low[u] = lowu;
return lowu;
}
int main()
{
int n;
stringstream ss;
while(scanf("%d",&n) == && n){
int u,v;
tot = ;MS0(head);
while(scanf("%d",&u) == && u){
string str;
getline(cin,str);
ss.clear();
ss << str;
while(ss >> v){
ins(u,v);
ins(v,u);
}
}
cc_cnt = ;dfs_clock = ;//设置好时间戳和初始化
MS0(iscut);MS0(pre);
rep1(i,,n)if(pre[i] == )
dfs(i,-);
printf("%d\n",cc_cnt);
}
return ;
}

poj 1144 Network的更多相关文章

  1. poj 1144 Network 图的割顶判断模板

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8797   Accepted: 4116 Descripti ...

  2. POJ 1144 Network(Tarjan求割点)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12707   Accepted: 5835 Descript ...

  3. poj 1144 Network(无向图求割顶数)

    题目链接:poj 1144 题意就是说有 n(标号为 1 ~ n)个网点连接成的一个网络,critical places 表示删去后使得图不连通的顶点,也就是割顶,求图中割顶的个数. 直接上大白书上的 ...

  4. POJ 1144 Network(无向图连通分量求割点)

    题目地址:id=1144">POJ 1144 求割点.推断一个点是否是割点有两种推断情况: 假设u为割点,当且仅当满足以下的1条 1.假设u为树根,那么u必须有多于1棵子树 2.假设u ...

  5. poj 1144 Network(割点)

    题目链接: http://poj.org/problem?id=1144 思路分析:该问题要求求出无向联通图中的割点数目,使用Tarjan算法即可求出无向联通图中的所有的割点,算法复杂度为O(|V| ...

  6. POJ 1144 Network(无向图的割顶和桥模板题)

    http://poj.org/problem?id=1144 题意: 给出图,求割点数. 思路: 关于无向图的割顶和桥,这篇博客写的挺不错,有不懂的可以去看一下http://blog.csdn.net ...

  7. poj 1144 Network 【求一个网络的割点的个数 矩阵建图+模板应用】

    题目地址:http://poj.org/problem?id=1144 题目:输入一个n,代表有n个节点(如果n==0就结束程序运行). 在当下n的这一组数据,可能会有若干行数据,每行先输入一个节点a ...

  8. poj 1144 Network【双连通分量求割点总数】

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11042   Accepted: 5100 Descript ...

  9. 图论(无向图的割顶):POJ 1144 Network

    Network   Description A Telephone Line Company (TLC) is establishing a new telephone cable network. ...

随机推荐

  1. ThinkPHP3.1快速入门(2)数据CURD

    上一篇中,我们了解了ThinkPHP的基础部分,以及如何创建一个控制器和模板,并知道了M方法的用法,本篇将会讲解下数据的CURD操作,探索下更多的数据操作. CURD CURD是一个数据库技术中的缩写 ...

  2. java 5 Lock

    import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...

  3. HDFS的java客户端操作代码(Windows上面打jar包,提交至linux运行)

    1.通过java.net.URL实现屏幕显示demo1文件的内容 package Hdfs; import java.io.InputStream; import java.net.URL; impo ...

  4. OpenSSH Client信息泄露和缓冲区溢出漏洞

    一.风险简述: 2016年1月14日OpenSSH发布官方公告称,OpenSSH Client 5.4~7.1版本中未公开说明的功能(Roaming)存在信息泄漏和缓冲区溢出漏洞,此漏洞可能导致您通过 ...

  5. Verilog Tips and Interview Questions

    Verilog Interiew Quetions Collection :  What is the difference between $display and $monitor and $wr ...

  6. (转)我所理解的OOP——UML六种关系

    原文地址:http://www.cnblogs.com/dolphinX/p/3296681.html 最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱 ...

  7. [转]前端开发必备 40款优秀CSS代码编写工具推荐

    编写工具地址如下 英文地址:http://webtoolsdepot.com/40-css-tools-to-improve-your-productivity/ 中文地址:http://www.cs ...

  8. js 一个关于图片onload加载的事

    前几天一个项目让我头疼了很久,一个关于图片加载时的loading效果,因为不是太懂js,所以在网上各种找资料,但还是不理想,无赖苦心研究,终于有了一点眉目了,虽然个中还有一些道理不懂,至少目的达到了; ...

  9. gulp自动化框架的搭建

    自动化框架的搭建:https://github.com/zjhsd2007/www 屏蔽掉的部分是Test(文件夹的目录 也是你的项目名称);本地项目启动后 配合sass,会自动启动浏览器,然后好处多 ...

  10. Unity3D 之UGUI 面板

    UGUI中使用面板,可以对一组控件分为一个组. 一个面板里面可以添加一些控件,就如同Html中的<div>一样.