主要思路:使用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. array_walk与array_map 的不同 array_filter

      array_walk 主要是要对数组内的每个值进行操作,操作结果影响原来的数组 array_map主要是对数组中的值进行操作后返回数组,以得到一个新数组 wallk 可以没有返回值 map要有,因 ...

  2. 第三十七节,hashlib加密模块

    在使用hashlib模块时需要先 import hashlib 引入模块 用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA ...

  3. mvc 母版页、用户自定义控件

    母版页(Master) 1.母版页是与Controller无关的,母版页只是一个View文件,而没有任何Controller与之相对应. 2.其实在ASP.NET MVC中View的aspx与母版页并 ...

  4. Android Studio的使用(十四)--如何查看资源或者函数在哪些类中被引用

    1.我们都知道在Eclipse中可以通过快捷键Ctrl+Shift+G开快速搜索方法.类.资源都在那个类中被使用了. 2.在Android Studio中则使用快捷键Ctrl+G.

  5. php数据排序---array_multisort

    PHP代码 <?php $ar1 = array(10, 100, 100, 0); $ar2 = array(1, 3, 2, 4); array_multisort($ar1, $ar2); ...

  6. MVC4数据注解和验证

    model中的验证注解特性: public class StuInfo { public int ID { get; set;} [Display(Name = "姓名")] // ...

  7. 使用composer命令创建laravel项目命令详解

    composer命令创建laravel项目的命令是: composer create-project --prefer-dist laravel/laravel blog "5.2.*&qu ...

  8. Ajax及select级联

    cascade.jsp(Test/WebContent/jsp/cascade.jsp): <%@ page language="java" contentType=&quo ...

  9. nginx proxy优化

    常用优化要点 当nginx用于反向代理时,每个客户端将使用两个连接: 一个用于响应客户端的请求,另一个用于到后端的访问: 如果机器是两核CPU,例如: 1 2 $ grep ^proces /proc ...

  10. 外部连VPN的方法

    1)安装网络挂件vpnc使用命令:sudo apt-get install vpnc 2)找到公司的默认配置文件xxx_common.pcf ,使用命令将其转换为对应的配置文件:sudo pcf2vp ...