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,但是它的 ...
随机推荐
- python3实现计算器
实验内容 1.简单计算器的设计 请设计简单的"加减乘除"计算器并从键盘上输入数据进行计算 数字的加减乘除,input返回的结果是str类型的,通过截取字符串中的运算符,来提取数字, ...
- 深入理解static、volatile关键字
static 意思是静态的,全局的.被修饰的东西在一定范围内是共享的,被类的所有实例共享,这时候需要注意并发读写的问题. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内找到他们. ...
- 按装parallels tool的失败之路
这是一篇对于其他人来说没什么意义的博客.单纯的可以被看作是日记. 首先,我想安装parallels tool. 但是照着网上很多教程(如www.cnblogs.com/artwalker/p/1323 ...
- Test typora
目录 0. test 0.5 easy test 1. problem 1 2. problem 2 3. problem 3 import numpy as np import matplotlib ...
- 惠普电脑(HP PHILIPS系列)安装ubuntu后无法连接WIFI解决方案(手动安装8821CE驱动)
一步一步来, 先说环境: 我的电脑是HP PHILIPS系列,ubuntu版本是16.04 背景: win10安装ubuntu后发现无法连接wifi(但win10系统可以连接WIFI),在ubuntu ...
- PHP反序列化 - Pikachu
概述 序列化serialize()序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象: class S{ public $test="pikachu"; } $s ...
- 安装macosx10.13high serria
本教程所需资源下载链接: 链接:https://pan.baidu.com/s/1wGTezXz6zGvtlwpv6mMoSg 提取码:r6n9 安装VMware workstation 16.0,安 ...
- 3A限流IC,带短路保护,PW1503和PW1502
一般说明 PW1503,PW1502是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路保护.它具有超温保护以及反向闭锁功能. PW1503,PW1502采用薄型(1毫米)5针薄 ...
- click的简单使用
click的简单使用 先通过一个简单的例子来认知一下click把 import click @click.command() @click.option('-p', '--port', default ...
- C#高级编程第11版 - 第七章 索引
[1]7.1 相同类型的多个对象 1.假如你需要处理同一类型的多个对象,你可以使用集合或者数组. 2.如果你想使用不同类型的不同对象,你最好将它们组合成class.struct或者元组. [2]7.2 ...