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的更多相关文章

  1. bzoj 1123 [POI2008]BLO Tarjan求割点

    [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1540  Solved: 711[Submit][Status][Discu ...

  2. [Luogu P3469] [POI2008]BLO-Blockade (割点)

    题面 传送门:https://www.luogu.org/problemnew/show/P3469 Solution 先跟我大声念: poi! 然后开始干正事. 首先,我们先把题目中的点分为两类:去 ...

  3. BZOJ 1123: [POI2008]BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1030  Solved: 440[Submit][Status] ...

  4. BZOJ1123: [POI2008]BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 614  Solved: 235[Submit][Status] ...

  5. BZOJ 1123: [POI2008]BLO( tarjan )

    tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------- ...

  6. [POI2008]BLO(Tarjan)

    [POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...

  7. BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...

  8. 【bzoj1123】【[POI2008]BLO】tarjan判割点

    (上不了p站我要死了,侵权度娘背锅) Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有t ...

  9. BZOJ 1123 && Luogu P3469 [POI2008]BLO-Blockade 割点+乘法原理

    想了半天式子...最后在邓大师的帮助下想出此题....QWQ我还是太菜了 对于一个非割点,ans+=2*(n-1); 对于一个割点,ans+= #include<cstdio> #incl ...

随机推荐

  1. luogu3278/bzoj3323 多项式的运算 (splay)

    mulx的操作,其实就是给r+1的系数+=r的系数,然后删掉r,把l~r-1向右移一位,再插一个0到原来的位置 splay维护区间加和区间乘就好了 (一定要注意做事的顺序,一件事都做完了再去做别的,否 ...

  2. rxjs学习笔记

    api List Rx.Observable.amb(...args) -存在竞争关系,amb里的流只能触发一个,并且忽略其他未处理的流. eq: <body> <input id= ...

  3. InnoDB,5项最佳实践,知其所以然?

    InnoDB,5项最佳实践,知其所以然? 原创: 58沈剑 架构师之路 昨天 缓存讲了一个月<缓存架构,一篇足够>.今天,开始写数据库. 第一篇,说说MySQL两个最常用的存储引擎,MyI ...

  4. 手把手教你用1行代码实现人脸识别 --Python Face_recognition

    环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10 > 安装步骤在这里 2. 安装 Python2.7.14 (Ubuntu17.10 ...

  5. Privoxy将Socks代理转化HTTP代理

    使用步骤 安装Privoxy sudo pacman -S privoxy # Arch Linux 创建配置文件 mkdir -p ~/.config/privoxy 向~/.config/priv ...

  6. IDEA或Webstorm设置Ctrl+滚轮调整字体大小

    按Ctrl+Shift+A,出现搜索框 输入mouse: 点击打开这个设置:勾选 点击ok,之后就可以通过Ctrl+滚轮 调整字体大小了.

  7. Python之偏函数

    学前知识储备: 函数在Python是第一类对象 (Python中一切皆对象). 第一类对象的特性: ----1.可以被引用 ----2.可以当做参数传入 ----3.可以当做函数返回值 ----4.可 ...

  8. 关于SSM的小感悟

    这周用SSM框架写了个小项目,真是各种百度啊,最后总算是实现了个登陆功能.刚才一直在修改,想实现登陆进去可以对id进行搜索,出现搜索的整体数据,无奈,一直没能实现.所以就只能留到下周了,到时候会把这个 ...

  9. JDK1.5以后的版本特性

    一.JDK1.5新特性 1.泛型:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法.可以在编译的时候就能 ...

  10. JAVA核心技术I---JAVA回顾

    一:基础类型运算 大部分的指令都没有支持byte.char.short,没有任何指令支持boolean类型.编译器在编译期或者运行期将byte和short类型的数据带符号扩展为相应的int类型数据,将 ...