hrbustoj 1494(原题UVA 315 Network) 解题报告 tarjan求割点
主要思路:使用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求割点的更多相关文章
- POJ 1144 Network(Tarjan求割点)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12707 Accepted: 5835 Descript ...
- UVA 315 Network (模板题)(无向图求割点)
<题目链接> 题目大意: 给出一个无向图,求出其中的割点数量. 解题分析: 无向图求割点模板题. 一个顶点u是割点,当且仅当满足 (1) u为树根,且u有多于一个子树. (2) u不为树根 ...
- uva 315 Network(无向图求割点)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA - 315 Network(tarjan求割点的个数)
题目链接:https://vjudge.net/contest/67418#problem/B 题意:给一个无向连通图,求出割点的数量.首先输入一个N(多实例,0结束),下面有不超过N行的数,每行的第 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- UVa 401 - Palindromes 解题报告 - C语言
1.题目大意 输入字符串,判断其是否为回文串或镜像串.其中,输入的字符串中不含0,且全为合法字符.以下为所有的合法字符及其镜像: 2.思路 (1)考虑使用常量数组而不是if或switch来实现对镜像的 ...
- UVA 796 Critical Links(Tarjan求桥)
题目是PDF就没截图了 这题似乎没有重边,若有重边的话这两点任意一条边都不是桥,跟求割点类似的原理 代码: #include <stdio.h> #include <bits/std ...
- [UVA315]Network(tarjan, 求割点)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- POJ 1144 Network(tarjan 求割点个数)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17016 Accepted: 7635 Descript ...
随机推荐
- Internet History, Technology and Security (Get Started)
Abstract 课程名称:互联网的历史.技术和安全 coursera地址 制作方:密歇根大学(University of Michigan) 教师:Charles Severance, Associ ...
- linux配置java环境变量(转)
linux配置java环境变量(详细) 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586. ...
- 指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效
以下内容来自互联网 (1)web: 需要在客户端配置文件的中增加connectionString节点,此节点描述了EntityClient的连接信息. 例如: 在web.config的中增加conne ...
- Spring Security3实现,权限动态获取
Spring Security3实现,权限动态获取 原文 http://blog.csdn.net/yangwei19680827/article/details/9359113 主题 网络安全Sp ...
- Qt之Windows开发移植问题汇总
来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101auw6.html 在用Qt开发完成项目后,就需要将其打包并且移植在其他机器上,能在其他PC机上正常跑起来才 ...
- docker installation on ubuntu
Ubuntu Docker is supported on these Ubuntu operating systems: Ubuntu Xenial 16.04 (LTS) Ubuntu Trust ...
- spice up your desktop
https://wiki.gnome.org/Projects/GnomeShell/CheatSheet windows10用了一段时间,回来看着gnome3-shell是那么的恶心,翻来翻去重新整 ...
- pipe的实现
本文进行了详细的描述,http://blog.csdn.net/zhouhong1026/article/details/8151235
- 内联函数 inline 漫谈
内联函数存在的结论是: 引入内联函数是为了解决函数调用效率的问题 由于函数之间的调用,会从一个内存地址调到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址.函数调用会有一定的时间开销,引 ...
- python 第三方库下载
C:\Python27\Scripts 路径下: easy_install.exe: C:\Python27\Scripts>easy_install.exe pycrypto pip.exe: ...