Network UVA - 315 无向图找割点
题意:
给你一个无向图,你需要找出来其中有几个割点
割点/割项:
1、u不为搜索起点,low[v]>=dfn[u]
2、u为搜索起点,size[ch]>=2
3、一般情况下,不建议在tarjan中直接输出答案(可能会有重复)
4、在有重边的情况下,将tarjan传值中的father改为其编号,由于存边的连续性
只要判断 (当前编号)i != (father编号)pre^1
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<queue>
6 using namespace std;
7 const int maxn=105;
8 int cnt,head[maxn],n,dfn[maxn],low[maxn],num,qua,root,iscut[maxn];
9 struct edge
10 {
11 int u,v,next;
12 }e[maxn*maxn];
13 void add_edge(int x,int y)
14 {
15 e[cnt].u=x;
16 e[cnt].v=y;
17 e[cnt].next=head[x];
18 head[x]=cnt++;
19 }
20 void tarjan(int x)
21 {
22 dfn[x]=low[x]=++num;
23 int flag=0;
24 for(int i=head[x];i!=-1;i=e[i].next)
25 {
26 int to=e[i].v;
27 if(!dfn[to])
28 {
29 tarjan(to);
30 low[x]=min(low[x],low[to]);
31 if(low[to]>=dfn[x])
32 {
33 flag++;
34 if(x!=root || flag>1) iscut[x]=1,qua++;
35 } //一个割点可能会多次经历iscut[x]=1,所以qua里面的值不是割点数目
36 }
37 else low[x]=min(dfn[to],low[x]);
38 }
39 }
40 int main()
41 {
42 while(~scanf("%d",&n) && n)
43 {
44 cnt=num=qua=0;
45 memset(iscut,0,sizeof(iscut));
46 memset(head,-1,sizeof(head));
47 memset(dfn,0,sizeof(dfn));
48 memset(low,0,sizeof(low));
49 int x,y;
50 char ch;
51 while(~scanf("%d",&x) && x)
52 {
53 while(~scanf("%d",&y))
54 {
55 scanf("%c",&ch);
56 add_edge(x,y);
57 add_edge(y,x);
58 if(ch=='\n'){
59 break;
60 }
61 }
62 }
63 // for(int i=0;i<cnt;++i)
64 // {
65 // printf("%d %d\n",e[i].u,e[i].v);
66 //
67 // }
68 for(int i=1;i<=n;++i)
69 {
70 if(!dfn[i])
71 {
72 //printf("**\n");
73 root=i;
74 tarjan(i);
75 }
76 }
77 int ans=0;
78 for(int i=1;i<=n;++i)
79 if(iscut[i]) ++ans;
80 printf("%d\n",ans);
81 }
82 return 0;
83 }
Network UVA - 315 无向图找割点的更多相关文章
- B - Network - uva 315(求割点)
题意:给一个无向连通图,求出割点的数量. 首先输入一个N(多实例,0结束),下面有不超过N行的数,每行的第一个数字代表后面的都和它存在边,0表示行输入的结束(很蛋疼的输入方式). 分析:割点的模板题 ...
- Network UVA - 315(求割点)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- Network POJ - 3694 无向图找桥
题意: 给你一个无向图,你需要找出来其中有几个桥 桥: 1.存在重边必定不为桥 2.low[v]>dfn[u] 代码: //题意很清晰 //就是这个需要先找出来原无向图中的桥个数,然后在判断添加 ...
- kuangbin专题 专题九 连通图 Network UVA - 315
题目链接:https://vjudge.net/problem/UVA-315 题目:求割点. #include <iostream> #include <cstdio> #i ...
- [kuangbin带你飞]专题九 连通图B - Network UVA - 315
判断割点的性质: 如果点y满足 low[y]>=dfn[x] 且不是根节点 或者是根节点,满足上述式子的有两个及其以上. 就是割点 如果是起点,那么至少需要两个子节点满足上述条件,因为它是根节点 ...
- UVA 315 Network (模板题)(无向图求割点)
<题目链接> 题目大意: 给出一个无向图,求出其中的割点数量. 解题分析: 无向图求割点模板题. 一个顶点u是割点,当且仅当满足 (1) u为树根,且u有多于一个子树. (2) u不为树根 ...
- UVA 315 315 - Network(求割点个数)
Network A Telephone Line Company (TLC) is establishing a new telephone cable network. They are con ...
- DFS应用——找出无向图的割点
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "DFS应用于找割点" 的idea 并用源代码加以实现: 0.2) 必须要事先 做个s ...
- POJ 1144 Network —— (找割点)
这是一题找无向图的割点的模板题,割点的概念什么的就不再赘述了.这里讲一下这个模板的一个注意点. dfs中有一个child,它不等于G[u].size()!理由如下: 如上图,1的size是2,但是它的 ...
随机推荐
- mysql的安全问题
mysql 用户目录下,除了数据文件目录,其他文件和目录属主都改为root 删除空账号 drop user ''@'localhost'; 给root 设置口令 在[client]中写入user='' ...
- Poj-P1088题解【动态规划/记忆化搜索】
本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: http://poj.org/problem?id=1088 题目描述: 区域由一个二维数组给 ...
- Java高并发与多线程(四)-----锁
今天,我们开始Java高并发与多线程的第四篇,锁. 之前的三篇,基本上都是在讲一些概念性和基础性的东西,东西有点零碎,但是像文科科目一样,记住就好了. 但是本篇是高并发里面真正的基石,需要大量的理解和 ...
- Java运算符概要与数学函数
运算符概要 在Java中,使用算术运算符+,-,*,/表示加减乘除运算,当参与/的运算的两个操作数都是整数时,表示整数除法,否则,表示浮点除法.整数的求余操作(有时称为取模),用%表示,例如,15/2 ...
- 【高并发】ReadWriteLock怎么和缓存扯上关系了?!
写在前面 在实际工作中,有一种非常普遍的并发场景:那就是读多写少的场景.在这种场景下,为了优化程序的性能,我们经常使用缓存来提高应用的访问性能.因为缓存非常适合使用在读多写少的场景中.而在并发场景中, ...
- 1.2V升压到3V和3.3V的升压芯片
1.2V镍氢电池升压到3V和3.3V输出,1.2V升压3V,1.2V升压3.3V稳压输出供电的芯片. PW5100 是一款低静态电流.达效率. PFM 模式控制的同步升压变换器. PW5100 所需的 ...
- QT串口助手(三):数据接收
作者:zzssdd2 E-mail:zzssdd2@foxmail.com 一.前言 开发环境:Qt5.12.10 + MinGW 实现的功能 串口数据的接收 ascii字符形式显示与hex字符形式显 ...
- ES6在工作中会用到的核心知识点讲解
一.var, let, const 谈到ES6,估计大家首先肯定会想到var,let,const 咱就先谈谈这三者的区别 var a = 3; { var a = 4; } console.log(a ...
- Architecture and design 洋葱 中间件 装饰器
Go kit - Frequently asked questions https://gokit.io/faq/ Architecture and design Introduction - Und ...
- GraphQL两年实战
https://mp.weixin.qq.com/s/XIQ-0kRhjCe2ubBuhnhlQA