poj1144 tarjan求割点

额,算法没什么好说的,只是这道题的读入非常恶心。

注意,当前点x是否是割点,与low[x]无关,只和low[son]和dfn[x]有关

还有,默代码的时候记住分目标点是父亲还是孩子两种情况讨论。

#include <cctype>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn=100, maxm=5000; struct Graph{
struct Edge{
int to, next; Graph *bel;
inline int operator *(){ return to; }
Edge& operator ++(){
return *this=bel->edge[next]; }
};
void addedge(int x, int y){
Edge &e=edge[++cntedge];
e.to=y; e.next=fir[x];
fir[x]=cntedge; e.bel=this;
}
void reset(){
cntedge=0; memset(fir, 0, sizeof(fir)); }
Edge& getlink(int x){
return edge[fir[x]]; }
Edge edge[maxm*2];
int cntedge, fir[maxn];
}g; int n, x, y, len, cut[maxn];
int time, dfn[maxn], low[maxn];
char s[maxn*5]; int getint(){
char c; int flag=1, re=0;
for (c=getchar(); !isdigit(c); c=getchar())
if (c=='-') flag=-1;;
for (re=c-48; c=getchar(), isdigit(c); re=re*10+c-48);
return re*flag;
} void tarjan(int now){
dfn[now]=low[now]=++time;
int cntc=0; Graph::Edge e=g.getlink(now);
for (; *e; ++e){
if (dfn[*e]) low[now]=min(low[now], dfn[*e]);
else{
++cntc; //这里错了一次
tarjan(*e);
low[now]=min(low[now], low[*e]);
if (low[*e]>=dfn[now]) cut[now]=1;
}
}
if (now==1) cut[now]=cntc>1?1:0; //处理根节点的特殊情况
} int main(){
while (n=getint()){
g.reset();
while (x=getint()){
fgets(s, maxn*5, stdin);
len=strlen(s); y=0;
for (int i=0; i<=len; ++i){
if (!isdigit(s[i])&&y){
g.addedge(x, y); g.addedge(y, x);
y=0; }
if (isdigit(s[i])) y=y*10+s[i]-48;
}
}
for (int i=1; i<=n; ++i)
dfn[i]=low[i]=cut[i]=0;
time=0; tarjan(1); int cnt=0;
for (int i=1; i<=n; ++i) if (cut[i]) ++cnt;
printf("%d\n", cnt);
}
return 0;
}

poj1144 tarjan求割点的更多相关文章

  1. [POJ1144][BZOJ2730]tarjan求割点

    求割点 一种显然的n^2做法: 枚举每个点,去掉该点连出的边,然后判断整个图是否联通 用tarjan求割点: 分情况讨论 如果是root的话,其为割点当且仅当下方有两棵及以上的子树 其他情况 设当前节 ...

  2. UESTC 900 方老师炸弹 --Tarjan求割点及删点后连通分量数

    Tarjan算法. 1.若u为根,且度大于1,则为割点 2.若u不为根,如果low[v]>=dfn[u],则u为割点(出现重边时可能导致等号,要判重边) 3.若low[v]>dfn[u], ...

  3. POJ 1144 Network(Tarjan求割点)

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

  4. poj 1523 SPF(tarjan求割点)

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  5. poj_1144Network(tarjan求割点)

    poj_1144Network(tarjan求割点) 标签: tarjan 割点割边模板 题目链接 Network Time Limit: 1000MS Memory Limit: 10000K To ...

  6. 洛谷P3388 【模板】割点(割顶)(tarjan求割点)

    题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输出格式: 第一行输出割点个数 第二行按照 ...

  7. tarjan求割点割边的思考

    这个文章的思路是按照这里来的.这里讨论的都是无向图.应该有向图也差不多. 1.如何求割点 首先来看求割点.割点必须满足去掉其以后,图被分割.tarjan算法考虑了两个: 根节点如果有两颗及以上子树,它 ...

  8. Tarjan求割点和桥

    by szTom 前置知识 邻接表存储及遍历图 tarjan求强连通分量 割点 割点的定义 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多, ...

  9. tarjan求割点与割边

    tarjan求割点与割边 洛谷P3388 [模板]割点(割顶) 割点 解题思路: 求割点和割点数量模版,对于(u,v)如果low[v]>=dfn[u]那么u为割点,特判根结点,若根结点子树有超过 ...

随机推荐

  1. jquery 用addClass之后 class有对应的事件,为什么要重新绑定一下事件呢

    假设有元素A,B,C,其中A和B都有class属性cls,如果在页面加载完成时,给具有class属性为cls的元素绑定某一事件,例如click,执行事件时调用alert.也就是说,页面加载完成后A和B ...

  2. 1.2 Data Abstraction(算法 Algorithms 第4版)

    1.2.1 package com.qiusongde; import edu.princeton.cs.algs4.Point2D; import edu.princeton.cs.algs4.St ...

  3. Linux学习之路(二)文件处理命令之上

    文件处理命令 1.目录处理命令 2.文件处理命令 3.链接命令 1.目录处理命令 建立目录:mkdirmkdir -p [目录名]-p 递归创建命令英文原意 : make directories 切换 ...

  4. 在CI框架中的配置整合amfphp

    之前做的项目用到CI框架和amfphp的整合,主要用于php与flex的交互,在此做一下记录: 一. 安装CI框架: 1.  搭建PHP运行环境,本人在WIN7下用WAMP作测试,安装目录:d:/wa ...

  5. 获取url的参数

    function getPrams () { var url, urlPrams, urlPramsArr=[], item=[], prams={}; url = location.href; if ...

  6. html5--2.1新的布局元素概述

    html5--2.1新的布局元素概述 学习要点 了解HTML5新标签(元素)的优点 了解本章要学习的新的布局元素 了解本章课程的安排 HTML5新标签的优点: 更注重于内容而不是形式 对人的友好:更加 ...

  7. 【HDU 4807】Lunch Time 最小费用最大流

    题意 在一个有向图当中,现在每一条边带有一个容量,现在有K个人在起点,需要到终点去吃饭,询问这K个人最后一个人到达食堂的最小时间是多少 贴一篇题解:http://blog.csdn.net/u0137 ...

  8. javascript macrotask & microtask

    先看一个 实例 案例 console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Pr ...

  9. 模拟jQuery的一些功能

    //getStyle function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; } else{ ...

  10. apache之访问本地文件,绑定域名

    1.打开文件 C:\Windows\System32\drivers\etc\hosts,在文件末尾加上下面代码: 127.0.0.1 www.wangdongxue.com 2.打开Apache的配 ...