题目链接:

题目

#67. 新年的毒瘤

问题描述

辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树。

这个长着毒瘤的树可以用 nn 个结点 mm 条无向边的无向图表示。这个图中有一些结点被称作是毒瘤结点,即删掉这个结点和与之相邻的边之后,这个图会变为一棵树。树也即无简单环的无向连通图。

现在给你这个无向图,喜羊羊请你帮他求出所有毒瘤结点。

输入

第一行两个正整数 n,mn,m,表示有 nn 个点 mm 条边。保证 n≥2n≥2。

接下来 mm 行,每行两个整数 v,uv,u,表示 vv 和 uu 之间有一条无向边。1≤v,u≤n1≤v,u≤n。保证没有重边和自环。

n,m<=10^5

输出

第一行一个正整数 nsns,表示这个图中有 nsns 个结点是毒瘤。

接下来一行,共 nsns 个整数,每个整数表示一个毒瘤结点的编号。请按编号从小到大的顺序输出。

数据保证图中至少存在一个毒瘤结点。

样例

input

6 6

1 2

1 3

2 4

2 5

4 6

5 6

output

3

4 5 6

题解

如果一个点不是割点(说明去掉它之后原图还是联通)并且删除它之后边剩下n-2条,则它是毒瘤节点。

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
using namespace std; const int maxn = 1e5+10;
int n, m; vector<int> G[maxn]; int pre[maxn], low[maxn], dfs_clock,iscut[maxn];
int dfs(int u, int fa) {
int lowu = pre[u] = ++dfs_clock;
int child = 0;
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i];
if (!pre[v]) {
child++;
int lowv = dfs(v, u);
lowu = min(lowu, lowv);
if (lowv >= pre[u]) {
iscut[u] = true;
}
}
else if (pre[v] < pre[u] && v != fa) {
lowu = min(lowu, pre[v]);
}
}
if (fa < 0 && child == 1) iscut[u] = 0;
low[u] = lowu;
return lowu;
} void init() {
for (int i = 0; i <= n; i++) G[i].clear();
memset(pre, 0, sizeof(pre));
memset(low, 0, sizeof(low));
memset(iscut, 0, sizeof(iscut));
dfs_clock = 0;
} int main() {
int tc;
scanf("%d%d", &n, &m);
init();
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v), u--, v--;
G[u].push_back(v);
G[v].push_back(u);
}
dfs(0, -1);
vector<int> ans;
for (int i = 0; i < n; i++) {
if (!iscut[i] && m - G[i].size() == n - 2) {
ans.push_back(i + 1);
}
}
sort(ans.begin(), ans.end());
printf("%d\n", ans.size());
for (int i = 0; i < ans.size() - 1; i++) printf("%d ", ans[i]);
printf("%d\n", ans[ans.size() - 1]);
return 0;
}

uoj 67 新年的毒瘤 割点的更多相关文章

  1. uoj 67 新年的毒瘤 tarjan求割点

    #67. 新年的毒瘤 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/67 Description 辞旧迎新之际 ...

  2. uoj#67. 新年的毒瘤(割顶)

    #67. 新年的毒瘤 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用n个结点m 条无向边的无向图表示.这个图中有一些结点被称作是毒瘤结点,即删掉这个结 ...

  3. UOJ#67. 新年的毒瘤

    传送门 练习一下Tarjan的模板. 求一下割点,然后加个约束条件判一下特殊点,剩下的就是所求点. //UOJ 67 //by Cydiater //2016.10.27 #include <i ...

  4. uoj#67 新年的毒瘤【Tarjan】

    题目:http://uoj.ac/problem/67 题意:n个节点m条边的图,删除某个节点及他相连的所有边之后,剩下的图就成了一棵树.找出所有这样的节点. 思路:上次去清华面试的B题,当时就是在瞎 ...

  5. UOJ 67 新年的毒瘤 - Tarjan

    Description 给出一个无向图, 要求找出某个点$u$, 去掉$u$和$u$所连的边, 所剩下的节点构成一棵树. Solution 首先, 割点肯定是不可能满足条件的, 因为去掉割点后会构成若 ...

  6. 【UOJ】67 新年的毒瘤 &【BZOJ】1123 BLO

    [UOJ 67] 题目链接: 传送门 题解: 第一眼很懵逼……这什么鬼. 思考什么点复合条件……(o(>﹏<)o 1.树,也就是说还剩n-2条边,等价于要删去一个度数为m-n+2的点. 2 ...

  7. 【UOJ#67】新年的毒瘤 Tarjan 割点

    #67. 新年的毒瘤 UOJ直接黏贴会炸...    还是戳这里吧: http://uoj.ac/problem/67#tab-statement Solution 看到这题的标签就进来看了一眼. 想 ...

  8. 【UOJ#67】新年的毒瘤(Tarjan)

    [UOJ#67]新年的毒瘤(Tarjan) 题面 UOJ 题解 一棵\(n\)个节点的树显然有\(n-1\)条边,在本题中意味着删去一个点之后还剩下\(n-2\)条边.那么找到所有度数为\(m-(n- ...

  9. UOJ67 新年的毒瘤【Tarjan,割点】

    Online Judge:#uoj 67 Label:Tarjan,割点,细节 题目描述 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树.这个长着毒瘤的树可以用\(n\)个结点 ...

随机推荐

  1. 教-----------有时候就是那么纠结,教的时候不提问题,好像很懂,最后又来纠缠你!真是ctmb

    A热心满满教导B 几分钟后...B”都懂了“ B几分钟后.又把你叫来.(走过去,您好,我还有个问题,能帮我回答下吗?不耽误你多少时间,) A已经走一段距离 ,   思维已经在别的事情上了,变得好没有耐 ...

  2. C# lock用法

    当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源 ...

  3. 【学习笔记】【C语言】算术运算

    C语言一共有34种运算符,包括了常见的加减乘除运算 1. 加法运算+ 除开能做加法运算,还能表示正号:+5.+90 2. 减法运算- 除开能做减法运算,还能表示符号:-10.-29 3. 乘法运算* ...

  4. OC1-XML文件解析

    <?xml version = "1.0" encoding="utf-8"?> <Users> <User id="0 ...

  5. Firefox 与 IE 对Javascript和CSS的区别

    1. document.formName.item("itemName") 问题 说明:IE下,可以使用document.formName.item("itemName& ...

  6. Linux命令行提示符设置

    我们使用Linux系统时接触最多的是它的命令行窗口,很多时候我们都需要在命令行上输入命令,在输入的命令前都会有提示符,一般系统默认的提示符形式是:[username@host 工作目录]$. 其实,我 ...

  7. c语言结构体指针初始化

    今天来讨论一下C中的内存管理. 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以前做二叉树算法时,他的左 ...

  8. php威盾解密的例子分享

    例子,批量解密  代码如下 复制代码 <?php/************************************威盾PHP加密专家解密算法 By:zhrt*http://www.111 ...

  9. Crusher Django 学习笔记1 hello world

    http://crusher-milling.blogspot.com/2013/09/crusher-django-tutorial1-hello-world.html 随便学习一下goagent ...

  10. C#中Delegate

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...