主要思路:使用tarjan选取一个根节点建立一个棵搜索树,判断一个点是割点的充分必要条件是,对于一个节点u如果他的孩子节点v的low值大于等于u的出生日期dfn值,进行下一步判断,如果u是我们选的根节点,我们还需要判断一下他的孩子节点的个数是否大于一,如果大于一则他是割点,反之不是。如果u不是根节点,那他就是割点了。因为我是第一次接触targin算法,跟着学姐的课件和自己的感觉敲了下去,WA已经刷屏了,原因就是我错误的认为根节点只要度数大于一就可以(学姐课件上就是先写的这个啊T T),其实是他也必须要满足low >= dfn的关系。。。好吧,以后记住就可以了^ ^.

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int maps[][],dfn[],low[],tot,n,root_son,mark[],flag[];
char a[];
void tarjan(int u,int fa)
{
for(int i = ; i <= n; i++)
{
if(maps[u][i])
{
///cout<<"the fa = "<<u<<" the son is = "<<i<<endl;
if(!flag[i])
{
flag[i] = ;
/// cout<<"the son "<<i<<" is not visited\n";
dfn[i] = low[i] = ++tot;
tarjan(i,u);
low[u] = min(low[i],low[u]);
if(low[i] >= dfn[u])
{
if(u != ) mark[u] = ;
else root_son++;
}
}
else if(i != fa)
{
///cout<<"the son "<<i<<" is visited"<<endl;
low[u] = min(low[u],dfn[i]);
/// cout<<"low["<<u<<"]"<<" hes become "<<low[u]<<endl;
}
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n) && n)
{
getchar();
memset(maps,,sizeof(maps));
while(gets(a))
{
if(a[] == '') break;
int len = strlen(a);
a[len] = ' ';
a[len+] = '\0';
int pos = ,num,c,fi,flag = ;
for(int i = ; i <= len; i++)
{
if(a[i] == ' ')
{
num = ,c = ;
for(int j = i-; j >= pos; j--)
{
num += c * (a[j] - '');
c *= ;
}
pos = i+;
//cout<<"num = "<<num<<endl;
if(!flag)
{
fi = num;
flag = ;
}
else
{
maps[fi][num] = ;
maps[num][fi] = ;
}
}
}
}
memset(a,,sizeof(a));
tot = ;
memset(flag,,sizeof(flag));
flag[] = low[] = dfn[] = ;
root_son = ;
memset(mark,,sizeof(mark));
//cout<<"dfs = "<<endl;
tarjan(,-);
/*for(int i = 1; i <= n; i++)
{
cout<<dfn[i]<<" "<<low[i]<<endl;
}*/
int ans = ;
for(int i = ; i <= n; i++)
{
if(mark[i]) ans++;
}
if(root_son >= ) ans++;
printf("%d\n",ans);
}
return ;
}

hrbustoj 1494(原题UVA 315 Network) 解题报告 tarjan求割点的更多相关文章

  1. POJ 1144 Network(Tarjan求割点)

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

  2. UVA 315 Network (模板题)(无向图求割点)

    <题目链接> 题目大意: 给出一个无向图,求出其中的割点数量. 解题分析: 无向图求割点模板题. 一个顶点u是割点,当且仅当满足 (1) u为树根,且u有多于一个子树. (2) u不为树根 ...

  3. uva 315 Network(无向图求割点)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. UVA - 315 Network(tarjan求割点的个数)

    题目链接:https://vjudge.net/contest/67418#problem/B 题意:给一个无向连通图,求出割点的数量.首先输入一个N(多实例,0结束),下面有不超过N行的数,每行的第 ...

  5. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  6. UVa 401 - Palindromes 解题报告 - C语言

    1.题目大意 输入字符串,判断其是否为回文串或镜像串.其中,输入的字符串中不含0,且全为合法字符.以下为所有的合法字符及其镜像: 2.思路 (1)考虑使用常量数组而不是if或switch来实现对镜像的 ...

  7. UVA 796 Critical Links(Tarjan求桥)

    题目是PDF就没截图了 这题似乎没有重边,若有重边的话这两点任意一条边都不是桥,跟求割点类似的原理 代码: #include <stdio.h> #include <bits/std ...

  8. [UVA315]Network(tarjan, 求割点)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  9. POJ 1144 Network(tarjan 求割点个数)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17016   Accepted: 7635 Descript ...

随机推荐

  1. hdu_4714_Tree2cycle(树形DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意:给你N个点N-1条边,形成一个树,让你拆树,并连接成一个环,每拆一次,连接一次,消耗1,问 ...

  2. LeetCode OJ 110. Balanced Binary Tree

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  3. 监控 monitor java 代码

    /* * To change this license header, choose License Headers in Project Properties. * To change this t ...

  4. (转) 三个nginx配置问题的解决方案

    今天开启了nginx的error_log,发现了三个配置问题: 问题一: 2011/07/18 17:04:37 [warn] 2422#0: *171505004 an upstream respo ...

  5. js实现td排序及分组分类

    如题 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  6. NDK编译应用程序

    Android源码目录下的build/envsetup.sh文件,描述编译的命令 - m:       Makes from the top of the tree. - mm:      Build ...

  7. asp的RegExp对象正则表达式功能用法

    RegExp对象提供简单的正则表达式支持功能. RegExp对象的用法: 以下为引用的内容: Function RegExpTest(patrn, strng) Dim regEx, Match, M ...

  8. sqlserver内存释放

    由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),  Sql Server才会释放一点点内存.所以很多时候,我们会发现运行Sql Serv ...

  9. HDU 5652 India and China Origins 二分优化+BFS剪枝

    题目大意:给你一个地图0代表可以通过1代表不可以通过.只要能从第一行走到最后一行,那么中国与印度是可以联通的.现在给你q个点,每年风沙会按顺序侵蚀这个点,使改点不可通过.问几年后中国与印度不连通.若一 ...

  10. C语言中static作用

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...