【UOJ#67】新年的毒瘤 Tarjan 割点
#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 割点相关推荐
- UOJ 67 新年的毒瘤 - Tarjan
Description 给出一个无向图, 要求找出某个点$u$, 去掉$u$和$u$所连的边, 所剩下的节点构成一棵树. Solution 首先, 割点肯定是不可能满足条件的, 因为去掉割点后会构成若 ...
- UOJ 67 新年的毒瘤
割点 非割点且度数=m-n+2的就是答案. 割点竟然没一次写对,智商已降低. 设根为1.对于非1节点,一定有父亲的边,则它是割点的充要条件是存在一个儿子的low>=自己的dfn.对于1节点,它是 ...
- 【UOJ】67 新年的毒瘤 【BZOJ】1123 BLO
[UOJ 67] 题目链接: 传送门 题解: 第一眼很懵逼--这什么鬼. 思考什么点复合条件--(o(>﹏<)o 1.树,也就是说还剩n-2条边,等价于要删去一个度数为m-n+2的点. 2 ...
- BZOJ1123BLO Tarjan割点+乘法原理+dfs
BZOJ1123 BLO : Tarjan割点+乘法原理+dfs Description 给定一张无向图,求每个点被封锁之后有多少个有序点对(x,y)(x!=y,1<=x,y<=n)满足x ...
- 【学习/模板】tarjan割点
P3388 [模板]割点(割顶) tarjan爷爷造福世界 割点适用于无向图, 所以low数组定义发生变化,不再是最早能追溯到的栈中节点编号(因为是无向边,没有意义), 而是一直往下走能绕到的最早的割 ...
- jzoj3896-战争游戏【tarjan,割点,点双联通分量】
正题 题目大意 求每个点是多少个点对之间路径的必经点. 解题思路 首先若一个点是在点不是割点,那么答案就是n−1n-1n−1,因为这个点不是除了它自己以为任何点对的必经点. 之后我们记录每个可以割掉的 ...
- POJ 3713 枚举 + Tarjan 割点
题意 传送门 POJ 3713 题解 白书里归到最大流最小割,Emmmm没有找到复杂度比较低的方法.虽然通道节点不相交可以转化为节点容量为 1,通过拆成 2 个节点并连边转化成最大流问题,但要枚举每一 ...
- tarjan——割点
不赘叙了,问就是找图里的割点. 运用tarjan算法,维护dfn[] 和 low[] 两个数组, 先说结论吧,就是: 一个割点,他的所有子节点的low值都会大于等于该割点的dfn值, 也即,对于边(u ...
- [Tarjan][割点] 洛谷 P3469 BLO-Blockade
题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个城镇之间至多只有一条直接连接的道路.人们可以从任意一 ...
最新文章
- js中every用法_every方法
- 30岁的互联网人你靠什么而立?
- 【已解决】Android 如何让应用在后台运行
- JS数组去重方法小结
- 新添加磁盘分区后,找不到新分区
- 小尼机器人_小尼被机器人嫌弃“唱歌难听,长相一般”?
- bzoj:1692 [Usaco2007 Dec]队列变换1640 [Usaco2007 Nov]Best Cow Line 队列变换
- Laravel 打造一个完整的项目
- ORA-02292:integrity constraint(xx) violated - child record found 外键关联,无法删除记录
- python 角点检测_opencv python Shi-Tomasi角点检测
- 树状结构搜索功能_百度搜索算法全解析SEO课程笔记
- android 底边框_Android底表
- [编程题] 被3整除
- 基于肤色和眼睛定位的人脸检测算法——MATLAB实现
- Python UI自动化 编程(一) UIAutomation
- short java_java基本数据类型short的使用(23)
- android横竖屏切换布局闪退,Android 横竖屏切换以及横屏启动闪退问题
- Aspose.Cells 取消隐藏行和列(取消隐藏单行、取消隐藏多行、取消隐藏单列、取消隐藏多列
- MATLAB打开后一直在初始化,或者初始化很慢问题
- 教学用计算机报废年限,教学科研仪器设备报废管理办法
热门文章
- android 自定义背景园,Android 自定义ProgressBar 进度条颜色和背景颜色
- java中删除每一条数据,一条sql语句删除表中所有除ID 不同之外的记录,只留一条。...
- java 二维数组位置_请完成下列Java程序:查找一个矩阵中的鞍点,对于一个二维数组中的鞍点,该点位置上的元素在该行上...
- java ArrayList转数组
- 遥感计算机分类有哪些,遥感数字图像的计算机分类.doc
- c语言程序设计开封电大,最新电大《C语言程序设计》题库及答案.docx
- 微型计算机引脚,微型计算机硬件基础8086引脚.doc
- php网站后台密码加密,thinkphp 后台登陆密码加密传入密钥
- mysql同时满足升序和降序_MySQL性能优化(三):索引
- php7连接oracle数据库,使用一个持久连接连到 Oracle 数据库 - PHP 7 中文文档