割点判断+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 ...
随机推荐
- C++类相关
本文打算通过一些小例子来说明几个关键的知识点. 一:成员函数相关 #include <iostream> using namespace std; class D { public: vo ...
- base64加密图片处理
场景:下载html中内嵌的base64加密图片 举个例子,博客园的插入图片有两种方式,一是引用图片链接,二是直接粘贴2进制图片文件.以第二种方式的图片则是以base64加密的方式内嵌在html页面中. ...
- Typescript学习笔记(四)class 类
typescript的类,与c#,java等语言的类类似.也是包含了一大部分的es6的实现.我会用最通俗的语言讲一下对coding有用的地方. class Greeter { greeting: st ...
- wildfly 10上使用最新的 Hibernate ORM OGM
ORM是关系型数据库连接:ogm是No sql数据库连接,Mongo, redis等. 1,下载ogm zip包,解压到wildfly_home\modules\system\layers\base, ...
- 跟我一起用node-express搭建一个小项目(node连接mongodb)[三]
数据库虽然安装并启动成功了,但我们需要连接数据库后才能使用数据库. 怎么才能在 Node.js 中使用 MongoDB 呢? 我们使用官方提供的 node-mongodb-native 驱动模块,打开 ...
- CF1129D Isolation(分块+DP)
一个很显然的DP方程式:f[i]=Σf[j],其中j<i且在[j+1,i]中出现1次的数不超过k个 乍一看挺神仙的,只会O(n^2),就是对于每个位置从后向前扫一遍,边扫边统计出现1次的数的个数 ...
- bash 3
1)unset 命令可以删除变量.readonly变量不能删除 2)变量类型 运行shell时,会同时存在三种变量: 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他sh ...
- http 请求头和响应头
客户端发送请求过程带着的数据: 1.请求地址 2.请求方式 3.请求头 request headers 4.请求参数 https://www.juhe.cn/ 130.... 1a2b....pei ...
- Unity 网络编程(Socket)应用
服务器端的整体思路: 1.初始化IP地址和端口号以及套接字等字段: 2.绑定IP启动服务器,开始监听消息 socketServer.Listen(10): 3.开启一个后台线程接受客户端的连接 so ...
- tar压缩解压文件
查看visualization1.5.tar.gz 压缩包里面的内容: $ tar -tf visualization1.5.tar.gz 解压指定文件JavascriptVisualRelease/ ...