loj 1063(求割点个数)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26780
思路:判断一个点是否是割点的两个条件:1、如果一个点v是根结点并且它的子女个数大于等于2,则v是割点。2、如果点v不是根结点,并且存在她的一个子女u,使得low[u]>=dfn[v],则v是割点。然后我发现以前求割点的写法有点问题,=.=//。幸好不是在比赛中遇到!贡献上最新模板。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- #define MAXN 44444
- struct Edge{
- int v,next;
- }edge[MAXN<<];
- int n,m,NE;
- int head[MAXN];
- void Insert(int u,int v)
- {
- edge[NE].v=v;
- edge[NE].next=head[u];
- head[u]=NE++;
- }
- int cnt,ans;
- int low[MAXN],dfn[MAXN];
- bool mark[MAXN];
- bool is_cutpoint[MAXN];
- void Tarjan(int root,int u)
- {
- int rt_son=;
- low[u]=dfn[u]=++cnt;
- mark[u]=true;
- for(int i=head[u];i!=-;i=edge[i].next){
- int v=edge[i].v;
- if(dfn[v]==){
- Tarjan(root,v);
- low[u]=min(low[u],low[v]);
- if(u!=root&&low[v]>=dfn[u])is_cutpoint[u]=true;
- rt_son++;
- }else if(mark[v]){
- low[u]=min(low[u],dfn[v]);
- }
- }
- if(u==root&&rt_son>=){
- is_cutpoint[u]=true;
- }
- }
- int main()
- {
- int _case,u,v,t=;
- scanf("%d",&_case);
- while(_case--){
- scanf("%d%d",&n,&m);
- NE=;
- memset(head,-,sizeof(head));
- while(m--){
- scanf("%d%d",&u,&v);
- Insert(u,v);
- Insert(v,u);
- }
- cnt=ans=;
- memset(mark,false,sizeof(mark));
- memset(dfn,,sizeof(dfn));
- memset(is_cutpoint,false,sizeof(is_cutpoint));
- for(int i=;i<=n;i++){
- if(dfn[i]==)Tarjan(i,i);
- }
- for(int i=;i<=n;i++)if(is_cutpoint[i])ans++;
- printf("Case %d: %d\n",t++,ans);
- }
- return ;
- }
loj 1063(求割点个数)的更多相关文章
- POJ1144Network(求割点个数)
题目链接 题意:一共n割点,然后若干行,每行第一个输入一个点,然后若干个点表示与他相连,0单独一行表示一个样例的结束.然后求图中的割点个数 割点:去掉该点之后得到的图不在连通,那么该店就是割点 一般割 ...
- POJ 1144 Network(tarjan 求割点个数)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17016 Accepted: 7635 Descript ...
- UVA-315 无向图求割点个数
题意抽象: 给定一个无向图,输出割点个数. 割点定义:删除该点后,原图变为多个连通块. 考虑一下怎么利用tarjan判定割点: 对于点u和他相连的当时还未搜到的点v,dfs后如果DFN[u]<= ...
- UVA 315 315 - Network(求割点个数)
Network A Telephone Line Company (TLC) is establishing a new telephone cable network. They are con ...
- poj 1144(求割点个数)
题目链接:http://poj.org/problem?id=1144 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根结点并且它的子女个数大于等于2,则v是割点.2.如果点v不是根结点,并 ...
- lightoj 1063 求割点
题目链接:http://lightoj.com/volume_showproblem.php?problem=1063 #include<cstdio> #include<cstri ...
- HDU2485Destroying the bus stations 拆点网络流求割点个数
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2485 题目要求:删除最少的点,使得源点到汇点的距离大于k 思路:拆点.建图求费用小于等于k的最大流 # ...
- poj1144 Network【tarjan求割点】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4319585.html ---by 墨染之樱花 [题目链接]http://poj.org/p ...
- 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)
Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
随机推荐
- java连接各种数据库代码大全
1.Oracle8/8i/9i数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();S ...
- Android Studio 设置不自动缩进匿名内部类
Android Studio 会默认缩进匿名内部类代码,这让人感觉有些不大适应,可以使用下面的方法进行取消. 取消选中橙色框前的几个复选框即可.
- ZLIB 库
zlib 编辑 zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表.zlib使用DEFLATE算法,最初是为libp ...
- 寻虫记:BOM头制造的冤案,无故多出空白行
最近在做的一个网站发生了一个很诡异的BUG: 使用IE浏览页面时,一切都挺正常: 而使用Firefox浏览时,发现某些页面元素之间的距离比预期的要宽很多,HTML元素本身的hight.padding和 ...
- 一个简单的javascript深拷贝
var extendDeep = function(parent,child){ var i, toStr = Object.prototype.toString, astr = '[object A ...
- mapreduce job提交流程源码级分析(一)(原创)
首先,在自己写的MR程序中通过org.apache.hadoop.mapreduce.Job来创建Job.配置好之后通过waitForCompletion方法来提交Job并打印MR执行过程的log.H ...
- 一个1年前的T-SQL问题
还记得年前的一个SQL问题,当时对SQL刚接触,因此绕开了它.用了别的办法.昨天看SQL突然想起了这个问题.百思不得其解,然后去SQL Server技术交流群,也请教了,大神高文佳,何志勇提示我因为先 ...
- java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. ...
- Centos7上使用官方YUM源安装Mysql
1. 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2. 安装mysql-co ...
- error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项:值“0”不匹配值“2”
error: vtkCommon.lib(vtkSmartPointerBase.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项:值“0”不 ...