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. [caffe]深度学习之图像分类模型VGG解读

    一.简单介绍 vgg和googlenet是2014年imagenet竞赛的双雄,这两类模型结构有一个共同特点是go deeper.跟googlenet不同的是.vgg继承了lenet以及alexnet ...

  2. 【玩转微信公众平台之六】 搭建新浪SAEserver

    赶紧接上一篇继续讲. ------本篇将介绍怎样搭建 新浪SAEserver.猛戳 http://sae.sina.com.cn/1.先自己注冊一个账号,假设有新浪的账号,微博之类的都能够直接拿来用, ...

  3. Android 定时任务高度【schedule】与【scheduleAtFixedRate】差别

    在android中调度定时任务有两种方法 1.schedule 2.scheduleAtFixedRate 这两种方法的差别在于 首次调用时间(Date when)这个參数 <span styl ...

  4. hud 1241 Oil Deposits

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  5. C#泛型比较大小

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. Java Socket简例

    Socket IO工具类: package com.test.util; import java.io.DataInputStream; import java.io.DataOutputStream ...

  7. Atom编辑器入门到精通(四) Atom使用进阶

    在本节中将介绍Atom提供的更高级的使用技巧,通过这些技巧将会进一步提高你的代码编写效率 代码片段(Snippets) Snippets是一种在代码中快捷插入代码块的方式,下面是维基百科中对Snipp ...

  8. HDU-1002(简单大数加法)

    A + B Problem II Problem Description I have a very simple problem for you. Given two integers A and ...

  9. IE下onchange事件不立即执行

    做前端开发免不了为浏览器的兼容而劳神,所以坚持把发现的浏览器兼容问题做做总结,是很有意义的. 比如IE8及以下的浏览器的onchange事件实在该控件失去焦点之后才执行的,也就是要点一下空白的地方,才 ...

  10. java中判断Object对象类型

    记录一下 Object param = params.get(i); if (param instanceof Integer) { int value = ((Integer) param).int ...