割点(tarjan)
对于根来说,如果它有超过1棵子树,那么它是一个割点
对于非叶结点来说,如果它的某一个儿子没有回边能到达高于它的点,那么它是一个割点
叶节点不是割点
//洛谷3388 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#define nn 100011
using namespace std;
int tim=0,tail=0,e=0,st;
int t[nn],top[nn],fir[nn],q[nn],sta[nn],vis[nn],nxt[nn<<1],to[nn<<1];
int read()
{
int ans=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) {ans=ans*10+ch-'0';ch=getchar();}
return ans*f;
}
void add(int u,int v)
{
nxt[++e]=fir[u];fir[u]=e;to[e]=v;
nxt[++e]=fir[v];fir[v]=e;to[e]=u;
}
void tarjan(int x,int fa)
{
int son=0,cut=0;
t[x]=top[x]=++tim;
for(int i=fir[x];i;i=nxt[i])
if(!t[to[i]])
{
tarjan(to[i],x);son++;
top[x]=min(top[x],top[to[i]]);
if(fa&&top[to[i]]>=t[x]) //不是根节点
cut=1;
}
else if(to[i]!=fa)
top[x]=min(top[x],t[to[i]]);
if(!fa&&son>1)
cut=1;
if(cut) q[++tail]=x;
}
int main()
{
int n,m,u,v;
n=read();m=read();
for(int i=1;i<=m;i++)
{
u=read();v=read();
add(u,v);
}
for(int i=1;i<=n;i++)
if(!t[i])
tarjan(i,0);
sort(q+1,q+tail+1);
printf("%d\n",tail);
for(int i=1;i<=tail;i++)
printf("%d ",q[i]);
return 0;
}
割点(tarjan)的更多相关文章
- 洛谷3388 【模板】割点 tarjan算法
题目描述 给出一个n个点,m条边的无向图,求图的割点. 关于割点 在无向连通图中,如果将其中一个点以及所有连接该点的边去掉,图就不再连通,那么这个点就叫做割点(cut vertex / articul ...
- poj1523 求割点 tarjan
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7678 Accepted: 3489 Description C ...
- poj 1523 割点 tarjan
Description Consider the two networks shown below. Assuming that data moves around these networks on ...
- POJ 1523 SPF 割点 Tarjan
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9317 Accepted: 4218 Description C ...
- P3225 [HNOI2012]矿场搭建 割点 tarjan 双联通分量
https://www.luogu.org/problemnew/show/P3225 题意 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条 ...
- P3469 [POI2008]BLO-Blockade 割点 tarjan
题意 给定一个无向图,问删掉点i,图中相连的有序对数.(pair<x, y> , x != y);求每个点对应的答案 思路 首先我们可以发现,如果这个点不是割点,那么答案就是n-1,如果是 ...
- 割点 —— Tarjan 算法
由于对于这一块掌握的十分不好,所以在昨天做题的过程中一直困扰着我,好不容易搞懂了,写个小总结吧 qwq~ 割点 概念 在无向连通图中,如果将其中一个点以及所有连接该点的边去掉,图就不再连通,那么这个点 ...
- zoj 1119 / poj 1523 SPF (典型例题 求割点 Tarjan 算法)
poj : http://poj.org/problem?id=1523 如果无向图中一个点 u 为割点 则u 或者是具有两个及以上子女的深度优先生成树的根,或者虽然不是一个根,但是它有一个子女 w, ...
- 图论--割点--Tarjan
#include<iostream> #include<stdio.h> #include<vector> using namespace std; const i ...
随机推荐
- 将自己的代码托管到github - 秦时明月 - CSDN博客
步骤: 1.建立自己的github 2.安装github客户端,并配置身份 3.建立github项目 4.将github项目库下载到本地 5.提交本地代码到github 详细操作: 1.github网 ...
- 【CS Round #44 (Div. 2 only) A】Frequent Numbers
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 大水题 [错的次数] 0 [反思] 在这了写反思 [代码] /* */ #include <cstdio> #include &l ...
- python 正则的使用例子和goupby
111122333类似这字符串的分类 Solution 1 ... using a regular expression def countAndSay(self, n): s = ' for _ i ...
- 对于MD5加密处理方式
来源:http://blog.51cto.com/xqtesting/1924977 但有时候我们请求的参数可能需要加密,比如登录接口中的密码可能需要经过md5加密这时候怎么处理呢? 这种方法比较简单 ...
- golang数组 排序和查找
package main import "fmt" func BubbleSort(arr *[5]int){ fmt.Println("排序前arr=",(* ...
- Java 1.8 Stream 用例测试
package stream; import model.Student; import org.junit.jupiter.api.Test; import java.util.*; import ...
- JavaScript 生成32位UUID
function uuid(){ var len=32; //32长度 var radix=16; //16进制 var chars='0123456789ABCDEFGHIJKLMNOPQRSTUV ...
- php表单和缩略图处理类是什么样呢
<?php//封装一个表单验证类//中文验证.邮箱验证.电话号码.手机.QQ.身份证.(由字母.数字.下划线组成,不能以数字开头)header('content-type:text/html;c ...
- 日期格式之——new Date()的用法
获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getF ...
- 洛谷 P3958 奶酪 并查集
目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...