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. bzoj3702/bzoj2212 二叉树 (线段树合并)

    用线段树记每个子树中包含的数,然后合并的时候算出来逆序对的数量(合并a,b时,就是size[ch[a][1]]*size[ch[b][0]]),来决定这个子树要不要翻转 #include<bit ...

  2. BZOJ3029守卫者的挑战(概率dp)

    题目大意:给定n个事件,第i个事件发生的概率为pi,收益为ai,初始收益为k,求n个事件之后发生的事件数>=l且收益>=0的概率 收益只可能是正整数或-1. Solution dp[i][ ...

  3. 20165223《Java程序设计》第九周Java学习总结

    教材学习内容总结 第13章- URL类 InetAddress类 套接字 UDP数据报 广播数据报 Java远程调用(RMI) 教材学习中的问题和解决过程 1. URL类 URL类构造方法: 使用字符 ...

  4. CF670C cinema

    想必是个半水题,div2的C嘛 仔细观察,发现排序可做. 怎么排序呢?排啥呢?拿啥离散化,拿啥结构体呢? 仔细思考热静分析,便可得出结论: 以每个人会的语言离散化,把每个电影建结构体后不排序,而是枚举 ...

  5. 洛谷P4070 生成魔咒

    题意:给定字符串,求每个前缀的本质不同的子串数量.字符集1e9. 解:在线构造后缀自动机并统计答案. 答案就是∑len[i] - len[fail[i]] 每次增加的时候,至多对三个节点有影响.然而把 ...

  6. 【CF1119D】Frets On Fire

    题目大意:给定一个长度为 n 的序列,给定一个恒定的 w,求解 \[\sum\limits_{i=1}^{n}min\{d[i],w\}\] 题解:学会了对最小值和式的快速处理. 若在下标的角度考虑, ...

  7. MVC之 自定义过滤器(ActionFilterAttribute)

    一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttribute类的方法签名. //表示所有操作 ...

  8. django orm 重点大全

    1.最简单的跨表,查询外键表中符合主表条件的记录列表 #用户类型表 class User_typ(models.Model): name=models.CharField(max_length=32) ...

  9. POJ3734Blocks(递推+矩阵快速幂)

    题目链接:http://poj.org/problem?id=3734 题意:给出n个排成一列的方块,用红.蓝.绿.黄四种颜色给它们染色,求染成红.绿的方块个数同时为偶数的方案数模10007的值. 题 ...

  10. SecureCRT或XShell软件

    SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. Xshell 是一个强大的安全终端模拟软件,它支持SSH1 ...