割点判断+luogu 3469 POI2008 BLO
1.根节点,有2棵及以上子树
2.非根节点,有子节点dfn[u]<=low[v]
#include <bits/stdc++.h>
#define N 1000050
using namespace std; inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;
} int head[N],dfn[N],low[N],cut[N];
int cnt,idx;
struct node{int v,next;}e[*N];
void insert(int u,int v){
e[++cnt]=(node){v,head[u]};head[u]=cnt;
e[++cnt]=(node){u,head[v]};head[v]=cnt;
}
void tarjan(int u,int f){
dfn[u]=low[u]=++idx;
int rs=;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(!dfn[v]){
tarjan(v,f);rs++;
low[u]=min(low[u],low[v]);
if((u==f&&<=rs)||(u!=f&&dfn[u]<=low[v]))
cut[u]=;
}else
low[u]=min(low[u],dfn[v]);
}
}
int n,m,ans; int main(){
n=read(),m=read();
for(int i=;i<=m;i++){
int x=read(),y=read();
insert(x,y);
}
for(int i=;i<=n;i++)
if(!dfn[i]) tarjan(i,i);
for(int i=;i<=n;i++)
if(cut[i]) ans++;
printf("%d\n",ans);
for(int i=;i<=n;i++)
if(cut[i]) printf("%d ",i);
return ;
}
割点+树形dp
在同一连通块内用z累计大小(除u节点)
判断割点并累加内部答案,
最后累加连通块内部与外界答案
树形dp+割点tarjan
#include<bits/stdc++.h>
#define ll long long
const int N=;
const int M=;
using namespace std; int dfn[N],low[N],siz[N],cut[N];
ll ans[N];
inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}
int head[N],tot,idx,n,m,x,y;
struct node{int v,next;}e[M];
void insert(int u,int v){
e[++tot]=(node){v,head[u]};head[u]=tot;
e[++tot]=(node){u,head[v]};head[v]=tot;}
int tarjan(int u){
int z=;siz[u]=;
dfn[u]=low[u]=++idx;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(!dfn[v]){
tarjan(v);
siz[u]+=siz[v];
low[u]=min(low[u],low[v]);
if(dfn[u]<=low[v]){
ans[u]+=(ll)z*siz[v];
z+=siz[v];}
//连通块内部的累加答案
}else low[u]=min(low[u],dfn[v]);
}ans[u]+=(ll)z*(n-z-);//此连通块内部和外部(除本节点)的累加答案
}
int main(){
n=read();m=read();
for(int i=;i<=m;i++)
x=read(),y=read(),insert(x,y);
tarjan();
for(int i=;i<=n;i++)
printf("%lld\n",(ans[i]+n-)<<);return ;
}
割点判断+luogu 3469 POI2008 BLO的更多相关文章
- bzoj 1123 [POI2008]BLO Tarjan求割点
[POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1540 Solved: 711[Submit][Status][Discu ...
- [Luogu P3469] [POI2008]BLO-Blockade (割点)
题面 传送门:https://www.luogu.org/problemnew/show/P3469 Solution 先跟我大声念: poi! 然后开始干正事. 首先,我们先把题目中的点分为两类:去 ...
- BZOJ 1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1030 Solved: 440[Submit][Status] ...
- BZOJ1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 614 Solved: 235[Submit][Status] ...
- BZOJ 1123: [POI2008]BLO( tarjan )
tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------- ...
- [POI2008]BLO(Tarjan)
[POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...
- BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)
#include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...
- 【bzoj1123】【[POI2008]BLO】tarjan判割点
(上不了p站我要死了,侵权度娘背锅) Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有t ...
- BZOJ 1123 && Luogu P3469 [POI2008]BLO-Blockade 割点+乘法原理
想了半天式子...最后在邓大师的帮助下想出此题....QWQ我还是太菜了 对于一个非割点,ans+=2*(n-1); 对于一个割点,ans+= #include<cstdio> #incl ...
随机推荐
- [ZJOI2015]地震后的幻想乡(期望+dp)
题目描述 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任务是尽快让幻想 ...
- PHP函数memory_get_usage获取PHP内存清耗量
(PHP 4 >= 4.3.2, PHP 5, PHP 7) memory_get_usage — 返回分配给 PHP 的内存量 说明 int memory_get_usage ([ bool ...
- css 多行文本的溢出显示省略号(移动端)
多行文本的溢出显示省略号(移动端) 一.单行文本的溢出显示省略号(通用) .mui-ellipsis { overflow: hidden; /*规定当文本溢出包含元素时发生的事情*/ white-s ...
- A1124. Raffle for Weibo Followers
John got a full mark on PAT. He was so happy that he decided to hold a raffle(抽奖) for his followers ...
- A1088. Rational Arithmetic
For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...
- FindExecutable:查找与一个指定文件关联在一起的程序的文件名
百度百科:http://baike.baidu.com/view/1285880.htm ------------------------------------------------------- ...
- react-native中的触摸事件
移动应用上的用户交互基本靠"摸".当然,"摸"也是有各种姿势的:在一个按钮上点击,在一个列表上滑动, 或是在一个地图上缩放.React Native 提供了可以 ...
- 第十六节,使用函数封装库tf.contrib.layers
这一节,介绍TensorFlow中的一个封装好的高级库,里面有前面讲过的很多函数的高级封装,使用这个高级库来开发程序将会提高效率. 我们改写第十三节的程序,卷积函数我们使用tf.contrib.lay ...
- testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...
- POJ 2253 Frogger (Floyd)
Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions:57696 Accepted: 18104 Descript ...