#67. 新年的毒瘤

UOJ直接黏贴会炸...    还是戳这里吧: http://uoj.ac/problem/67#tab-statement

Solution

看到这题的标签就进来看了一眼。

想了一个比较胡搞的方法,因为删除割点就会产生多个块,那么割点是不能被割的,所以只能割非割点。

删除非割点后是棵树,说明边数是N-2...然后求一下每个点的度...

只要不是割点,并且割掉这个点剩的边是N-2条,就输出.....

然后就A了...感觉还是很科学的。 (这个Tarjan模板太好打了...顺便求了个点双...)

Code

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define LL long long
inline int read()
{int x=0,f=1; char ch=getchar();while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}return x*f;
}
#define MAXN 100010
int N,M,tot;
LL sum;
struct EdgeNode{int next,to,from;}edge[MAXN<<1];
int head[MAXN],cnt=1;
void AddEdge(int u,int v) {cnt++; edge[cnt].next=head[u]; head[u]=cnt; edge[cnt].to=v;}
void InsertEdge(int u,int v) {AddEdge(u,v); AddEdge(v,u);}
#define Pa pair<int,int>
vector<int>BCC[MAXN];
Pa st[MAXN]; int top;
int dfn[MAXN],low[MAXN],dfsn,cut[MAXN],bcc,belong[MAXN],d[MAXN];
void Tarjan(int now,int last)
{dfn[now]=low[now]=++dfsn; int son=0;for (int i=head[now]; i; i=edge[i].next)if (!dfn[edge[i].to]) {st[++top]=make_pair(now,edge[i].to);  son++;Tarjan(edge[i].to,now); low[now]=min(low[now],low[edge[i].to]); if (dfn[now]<=low[edge[i].to]){cut[now]=1; bcc++; BCC[bcc].clear(); int tnow=-1,tto=-1;while (1) {tnow=st[top].first,tto=st[top].second; top--;if (belong[tnow]!=bcc) BCC[bcc].push_back(tnow),belong[tnow]=bcc;if (belong[tto]!=bcc) BCC[bcc].push_back(tto),belong[tto]=bcc;if (tnow==now && tto==edge[i].to) break;}}    }else if (dfn[edge[i].to]<dfn[now] && edge[i].to!=last) st[++top]=make_pair(now,edge[i].to),low[now]=min(low[now],dfn[edge[i].to]);if (last<0 && son==1) cut[now]=0;
}
int main()
{N=read(),M=read();for (int x,y,i=1; i<=M; i++) x=read(),y=read(),InsertEdge(x,y),d[x]++,d[y]++;for (int i=1; i<=N; i++) if (!dfn[i]) Tarjan(i,-1);for (int i=1; i<=N; i++) if (!cut[i] && d[i]==M-N+2) tot++;printf("%d\n",tot);for (int i=1; i<=N; i++) if (!cut[i] && d[i]==M-N+2) printf("%d ",i); puts(""); return 0;
}

转载于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5910783.html

【UOJ#67】新年的毒瘤 Tarjan 割点相关推荐

  1. UOJ 67 新年的毒瘤 - Tarjan

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

  2. UOJ 67 新年的毒瘤

    割点 非割点且度数=m-n+2的就是答案. 割点竟然没一次写对,智商已降低. 设根为1.对于非1节点,一定有父亲的边,则它是割点的充要条件是存在一个儿子的low>=自己的dfn.对于1节点,它是 ...

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

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

  4. BZOJ1123BLO Tarjan割点+乘法原理+dfs

    BZOJ1123 BLO : Tarjan割点+乘法原理+dfs Description 给定一张无向图,求每个点被封锁之后有多少个有序点对(x,y)(x!=y,1<=x,y<=n)满足x ...

  5. 【学习/模板】tarjan割点

    P3388 [模板]割点(割顶) tarjan爷爷造福世界 割点适用于无向图, 所以low数组定义发生变化,不再是最早能追溯到的栈中节点编号(因为是无向边,没有意义), 而是一直往下走能绕到的最早的割 ...

  6. jzoj3896-战争游戏【tarjan,割点,点双联通分量】

    正题 题目大意 求每个点是多少个点对之间路径的必经点. 解题思路 首先若一个点是在点不是割点,那么答案就是n−1n-1n−1,因为这个点不是除了它自己以为任何点对的必经点. 之后我们记录每个可以割掉的 ...

  7. POJ 3713 枚举 + Tarjan 割点

    题意 传送门 POJ 3713 题解 白书里归到最大流最小割,Emmmm没有找到复杂度比较低的方法.虽然通道节点不相交可以转化为节点容量为 1,通过拆成 2 个节点并连边转化成最大流问题,但要枚举每一 ...

  8. tarjan——割点

    不赘叙了,问就是找图里的割点. 运用tarjan算法,维护dfn[] 和 low[] 两个数组, 先说结论吧,就是: 一个割点,他的所有子节点的low值都会大于等于该割点的dfn值, 也即,对于边(u ...

  9. [Tarjan][割点] 洛谷 P3469 BLO-Blockade

    题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个城镇之间至多只有一条直接连接的道路.人们可以从任意一 ...

最新文章

  1. js中every用法_every方法
  2. 30岁的互联网人你靠什么而立?
  3. 【已解决】Android 如何让应用在后台运行
  4. JS数组去重方法小结
  5. 新添加磁盘分区后,找不到新分区
  6. 小尼机器人_小尼被机器人嫌弃“唱歌难听,长相一般”?
  7. bzoj:1692 [Usaco2007 Dec]队列变换1640 [Usaco2007 Nov]Best Cow Line 队列变换
  8. Laravel 打造一个完整的项目
  9. ORA-02292:integrity constraint(xx) violated - child record found 外键关联,无法删除记录
  10. python 角点检测_opencv python Shi-Tomasi角点检测
  11. 树状结构搜索功能_百度搜索算法全解析SEO课程笔记
  12. android 底边框_Android底表
  13. [编程题] 被3整除
  14. 基于肤色和眼睛定位的人脸检测算法——MATLAB实现
  15. Python UI自动化 编程(一) UIAutomation
  16. short java_java基本数据类型short的使用(23)
  17. android横竖屏切换布局闪退,Android 横竖屏切换以及横屏启动闪退问题
  18. Aspose.Cells 取消隐藏行和列(取消隐藏单行、取消隐藏多行、取消隐藏单列、取消隐藏多列
  19. MATLAB打开后一直在初始化,或者初始化很慢问题
  20. 教学用计算机报废年限,教学科研仪器设备报废管理办法

热门文章

  1. android 自定义背景园,Android 自定义ProgressBar 进度条颜色和背景颜色
  2. java中删除每一条数据,一条sql语句删除表中所有除ID 不同之外的记录,只留一条。...
  3. java 二维数组位置_请完成下列Java程序:查找一个矩阵中的鞍点,对于一个二维数组中的鞍点,该点位置上的元素在该行上...
  4. java ArrayList转数组
  5. 遥感计算机分类有哪些,遥感数字图像的计算机分类.doc
  6. c语言程序设计开封电大,最新电大《C语言程序设计》题库及答案.docx
  7. 微型计算机引脚,微型计算机硬件基础8086引脚.doc
  8. php网站后台密码加密,thinkphp 后台登陆密码加密传入密钥
  9. mysql同时满足升序和降序_MySQL性能优化(三):索引
  10. php7连接oracle数据库,使用一个持久连接连到 Oracle 数据库 - PHP 7 中文文档