主要思路:使用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. C++编写一个简单的DLL

    什么是DLL: 自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上 Windows操作系统中几乎所有的内容都由DL ...

  2. leetcode441(巧妙利用取整和解方程)

    You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...

  3. OpenLDAP安装与配置

    系统:ubuntu 14.04 安装: 1. sudo apt-get install slapd ldap-utils 2. 在1的过程中会让你输了admin密码 配置: 如果安装过,只是想配置Op ...

  4. hdu_1513_Palindrome(LCS+滚动数组)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 题意:给你一个字符串,问你最少插入多少个字符使其为回文字符. 题解:将字符串倒着保存,然后求一下 ...

  5. 关于Select * 与Select 字段名 的问题!

    [转]http://blog.csdn.net/tongyu2009/article/details/8252418 1.SELECT * 语句取出表中的所有字段,不论该字段的数据对调用的应用程序是否 ...

  6. Puppent 介绍原理及安装

    Puppet原理: Puppet是一个或者多个master,众多client,所有的客户端都定期(默认为30分钟)使用facter工具把 客户端的基本信息,通过https的xmlrpc协议发送给服务器 ...

  7. for in 的各种坑

    for in方法用来遍历数组或者对象的显性属性,就是说我们自己定义的属性都是可以遍历的,而对象固有的属性,比如Object.prototype.toString是遍历不出来的. for in方法简洁好 ...

  8. HDU4815/计数DP

    题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=4815] 简单说一下题意: 有n道题,每到题答对得分为a[ i ],假如A不输给B的最小概率是P,那么A ...

  9. 关于前台主键输入错误对后台hibernate方法的影响

    由于前台输入时开始不小心打错了主键为value=“${conf_id}”/ 导致后台得到的主键不是数字“1”而是“1/”所以到后台就算是进的updata方法结果运行的却是添加方法 原因可能是传入的对象 ...

  10. 视频录制SurfaceView

    package com.bw.videorecorder; import java.io.File;import java.io.IOException; import android.media.M ...