【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=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define MAXN 100010
int N,M,tot;
LL sum;
struct EdgeNode{int next,to,from;}edge[MAXN<<];
int head[MAXN],cnt=;
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=;
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]=; bcc++; BCC[bcc].clear(); int tnow=-,tto=-;
while ()
{
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< && son==) cut[now]=;
}
int main()
{
N=read(),M=read();
for (int x,y,i=; i<=M; i++) x=read(),y=read(),InsertEdge(x,y),d[x]++,d[y]++;
for (int i=; i<=N; i++) if (!dfn[i]) Tarjan(i,-);
for (int i=; i<=N; i++) if (!cut[i] && d[i]==M-N+) tot++;
printf("%d\n",tot);
for (int i=; i<=N; i++) if (!cut[i] && d[i]==M-N+) printf("%d ",i); puts("");
return ;
}
【UOJ#67】新年的毒瘤 Tarjan 割点的更多相关文章
- uoj 67 新年的毒瘤 tarjan求割点
#67. 新年的毒瘤 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/67 Description 辞旧迎新之际 ...
- UOJ 67 新年的毒瘤 - Tarjan
Description 给出一个无向图, 要求找出某个点$u$, 去掉$u$和$u$所连的边, 所剩下的节点构成一棵树. Solution 首先, 割点肯定是不可能满足条件的, 因为去掉割点后会构成若 ...
- uoj 67 新年的毒瘤 割点
题目链接: 题目 #67. 新年的毒瘤 问题描述 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用 nn 个结点 mm 条无向边的无向图表示.这个图中有 ...
- uoj#67. 新年的毒瘤(割顶)
#67. 新年的毒瘤 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用n个结点m 条无向边的无向图表示.这个图中有一些结点被称作是毒瘤结点,即删掉这个结 ...
- UOJ#67. 新年的毒瘤
传送门 练习一下Tarjan的模板. 求一下割点,然后加个约束条件判一下特殊点,剩下的就是所求点. //UOJ 67 //by Cydiater //2016.10.27 #include <i ...
- uoj#67 新年的毒瘤【Tarjan】
题目:http://uoj.ac/problem/67 题意:n个节点m条边的图,删除某个节点及他相连的所有边之后,剩下的图就成了一棵树.找出所有这样的节点. 思路:上次去清华面试的B题,当时就是在瞎 ...
- 【UOJ#67】新年的毒瘤(Tarjan)
[UOJ#67]新年的毒瘤(Tarjan) 题面 UOJ 题解 一棵\(n\)个节点的树显然有\(n-1\)条边,在本题中意味着删去一个点之后还剩下\(n-2\)条边.那么找到所有度数为\(m-(n- ...
- 【UOJ】67 新年的毒瘤 &【BZOJ】1123 BLO
[UOJ 67] 题目链接: 传送门 题解: 第一眼很懵逼……这什么鬼. 思考什么点复合条件……(o(>﹏<)o 1.树,也就是说还剩n-2条边,等价于要删去一个度数为m-n+2的点. 2 ...
- UOJ67 新年的毒瘤 tarjan
题目传送门 题意:给出一个$N$个点.$M$条边的无向图,找出其中的点,满足去掉该点与和它相连的边之后,这个图会变成一棵树.$N , M \leq 10^5$ 说是毒瘤,真的不毒瘤 思考一下,我们需要 ...
随机推荐
- js(javascript)与OC(Objective-C)交互
实质上oc与js的通信交互就是发送消息,也即函数调用,iOS7以后官方公布JavaScriptCore framework中很方便我们对他们之间的相互调用.在以前我们只能通过UIWebView的UIW ...
- I2C基础知识
常识 两条总线线路:串行数据总线SDA,串行时钟总线SCL 每个连接到总线的器件都有唯一的地址供其他设备寻址 每个连接到总线的器件都可以作为发送器和接收器 是多主机总线,如果两个或更多主机同时初始化, ...
- PHP函数整理(一)
以下均参考自 php.net 及 W3School 1. urlencode() : 此函数便于将字符串编码并将其用于URL的请求部分,同时它还便于将变量传递给下一页. 函数语法 : string u ...
- 对 Visual Studio 中的Resharper禁用对某种文件的检测
原因:在Visual Studio中安装Reshaper后,就会对各种文件进行代码检测,但是因为Reshaper更新的速度不是很及时,所以有时会对Visual Studio中某些新功能误断,导致Cod ...
- mysql 优化(一)
SHOW VARIABLES like 'slow_query_log' #查看慢查询设置 1 set GLOBAL slow_query_log_file ="d:/sql/sql_l ...
- POJ2985 The k-th Largest Group[树状数组求第k大值+并查集||treap+并查集]
The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8807 Accepted ...
- Spring MVC 访问静态资源
当我们不通过控制器,想直接访问网站上的静态资源时,由于DispatcherServlet的url-patten的通配符的限制,导致系统会认为你访问的是个url映射,这时需要配置一个东西就可以解决问题了 ...
- PHP unset销毁变量并释放内存
PHP的unset()函数用来清除.销毁变量,不用的变量,我们可以用unset()将它销毁.但是某些时候,用unset()却无法达到销毁变量占用的内存!我们先看一个例子: <?php $s=st ...
- Python3实现TCP端口扫描
在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞. TCP端 ...
- 使用Memberane Moniter监控HTTP & SOAP requests
Memberane Moniter 使用方法见左侧Documentation 此工具可以监控到每一次发生在指定端口的http请求或者soap请求,如图所示. 但是个人认为仍然有几个问题: 1.不能真正 ...