思路

这个题有点吓人呢先在这里默认大家都会tarjan找割点了哈

如果你跑tarjantarjantarjan找割点然后把割点删掉跑bfsbfsbfs找连通块,这个O(n2)O(n^2)O(n2)显然TTT飞了

所以我们要找一个边tarjantarjantarjan边计算的方法

首先如果一个点在一个连通块内,他的贡献仅仅是所有点和他的联系断了,所以割点的ansansans就是

2×(n−1)2\times (n-1)2×(n−1)

难的是考虑割点,不过我们首先要知道:

一个连通块的贡献===这个连通块的大小×(\times (×(整个图大小−-−这个连通块大小)))

这是一个通式,适用于以上所有的贡献求解,因为你的这个连通块和外面所有点都失去联系了,固然失去联系数就这么算了

对于一个割点uuu,它的子树(以vvv为根节点)中不能连接到割点的祖先的,这样的子树就被割成一个连通块,这些子树的贡献是

∑dfn[u]≤low[v]size[v]×(n−size[v])\sum_{dfn[u]\leq low[v]}size[v]\times (n-size[v])dfn[u]≤low[v]∑​size[v]×(n−size[v])

这样我们可以边tarjantarjantarjan边记录了,除去割点和被他割掉的子树就是一个连通块的,它们的贡献是

(n−sum−1)×(sum+1)(n-sum-1)\times (sum+1)(n−sum−1)×(sum+1)

其中

sum=∑dfn[u]≤low[v]size[v]sum=\sum_{dfn[u]\leq low[v]}size[v]sum=dfn[u]≤low[v]∑​size[v]

割点自己的贡献是n−1n-1n−1,合起来,割点的ansansans的计算公式为

ans=∑dfn[u]≤low[v]size[v]×(n−size[v])+(n−sum−1)×(sum+1)+(n−1)ans=\sum_{dfn[u]\leq low[v]}size[v]\times (n-size[v])+(n-sum-1)\times (sum+1)+(n-1)ans=dfn[u]≤low[v]∑​size[v]×(n−size[v])+(n−sum−1)×(sum+1)+(n−1)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#define int long long
using namespace std;
const int orz=1000100;
struct EDGE{int ver,dis,nxt,pre,num;
}edge[orz];
int head[orz],n,m,cnt;
int ans[orz],dfn[orz],low[orz],dfs_cnt,size[orz];
inline int read(){int sym=0,res=0;char ch=0;while (ch<'0'||ch>'9')sym|=(ch=='-'),ch=getchar();while (ch>='0'&&ch<='9')res=(res<<3)+(res<<1)+(ch^48),ch=getchar();return sym?-res:res;
}
void file(){freopen("read.in","r",stdin);freopen("write.out","w",stdout);
}
void add(int u,int v){edge[++cnt].ver=v;edge[cnt].nxt=head[u];head[u]=cnt;
}
void tarjan(int u){dfn[u]=low[u]=++dfs_cnt;size[u]=1;int sum=0,child=0;bool cut=false;for (int i=head[u];i;i=edge[i].nxt){int v=edge[i].ver;if (!dfn[v]){tarjan(v);size[u]+=size[v];low[u]=min(low[u],low[v]);if (low[v]>=dfn[u]){ans[u]+=size[v]*(n-size[v]);//累计分出去的儿子的贡献sum+=size[v];child++;if (u!=1||child>=2)cut=true;}}else{low[u]=min(low[u],dfn[v]);}}if (!cut)ans[u]=2*(n-1);else ans[u]+=(n-sum-1)*(sum+1)+(n-1);//外界是一个连通块,算上他们的贡献,然后自己是一个连通块,加上自己的贡献;//每个连通块的贡献都是该块size乘n-size
}
signed main(){n=read();m=read();for (int i=1;i<=m;i++){int x=read(),y=read();add(x,y);add(y,x);}tarjan(1);for (int i=1;i<=n;i++){printf("%lld\n",ans[i]);}return 0;
}

洛谷 P3469 [POI2008]BLO-Blockade相关推荐

  1. 洛谷 P3469 [POI2008]BLO-Blockade (Tarjan,割点)

    P3469 [POI2008]BLO-Blockade https://www.luogu.org/problem/P3469 题目描述 There are exactly nn towns in B ...

  2. 洛谷P3469 [POI2008]BLO-Blockade(割点过程计算bcc)

    思路:去掉点 i i i后,其他点无论如何都无法到达它了,所以答案首先是 2 ∗ ( n − 1 ) 2*(n-1) 2∗(n−1). 其次,考虑这个点去掉之后,是否会造成一个点无法到达其他点了呢?也 ...

  3. 洛谷 P3466 [POI2008]KLO-Building blocks

    洛谷 P3466 [POI2008]KLO-Building blocks 题目: 英文.转链接 题解: fhq-treap,按权分裂. 题目要求"连续K柱的高度是一样",那么这个 ...

  4. 「洛谷P3469」[POI2008]BLO-Blockade 解题报告

    P3469[POI2008]LO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个 ...

  5. 【洛谷 P3469】[POI2008]BLO-Blockade(割点)

    题目链接 题意:一个无向联通图,求删去每个点及其所有边后有多少有序点对的连通性发生了变化. Tarjan求割点的例题.. 如果当前点不是割点,那么它对整个图的连通性不产生影响,只有自己与其他\(n-1 ...

  6. [Tarjan][割点] 洛谷 P3469 BLO-Blockade

    题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个城镇之间至多只有一条直接连接的道路.人们可以从任意一 ...

  7. 洛谷 P3466 [POI2008]KLO-Building blocks 支持删除的堆

    题面 这题怎么人均fhqfhqfhq啊,让STLSTLSTL选手情何以堪? 于是就来一发priorityprioritypriority_queuequeuequeue+map的题解吧(突然发现map ...

  8. BZOJ1112洛谷P3466 [POI2008]KLO-Building blocks(砖头)[对顶堆学习笔记]

    坑爹的BZOJ因为不让 输出方案我WA了若干次 据说正解是平衡树/线段树,我不会,就用了个新东西->对顶堆 对顶堆 一个维护中位数的东西,我们通过维护两个堆,来维所有数的中位数 (显然我们可以排 ...

  9. BZOJ1112: [POI2008]砖块Klo(洛谷P3466)

    平衡树 BZOJ题目传送门 洛谷题目传送门 动态维护中位数,平衡树上一发就好了. 代码: #include<cctype> #include<cstdio> #include& ...

最新文章

  1. Module ‘celery‘ has no attribute ‘celery‘问题
  2. 【解题报告】Leecode 237. 删除链表中的节点——Leecode每日一题系列
  3. HIVE入门之数据模型
  4. Android loading进度条使用简单总结
  5. VC中设置头文件的搜索路径~~
  6. html52D转换3D,CSS3 Transform 2D和3D转换
  7. 正向代理与反向代理的理解
  8. webpack配置信息说明
  9. matlab里直线拟合,matlab如何拟合直线
  10. java ape格式转换_ape格式怎么转换mp3?ape转换mp3的正确方法
  11. 笔记本电脑触摸板的使用
  12. Linux基础-日志管理
  13. 世界时间UT和协调世界时间UTC
  14. Android修行手册 - TextureView和SurfaceView的属性方法以及示例
  15. Capture One 22 最新推出全景拼接功能
  16. curl命令详解 (curl -I)
  17. 工具及方法 - 如何保护眼睛
  18. 深度学习-AUC/PR计算
  19. 人脸清晰化神器codeFormer图形界面包GUI
  20. 局域网语音对讲系统_IP广播对讲系统停车场解决方案

热门文章

  1. Android简易计分器
  2. IG-REPORT企业智能报表 测试记录
  3. float和double的精度
  4. (PPT抠图)设置透明色/删除背景
  5. 统计了300课时的代码,得到学Python需要掌握的1024个英语单词
  6. 计算机毕业设计谢辞怎么写,计算机论文致谢范文计算机专业本科毕业设计论文致谢写...
  7. php的mysqli步骤,php安装扩展mysqli的实现步骤及报错解决办法
  8. android刘海屏高度适配,Android刘海屏的适配
  9. js中“\”转义字符的使用
  10. Android编译Skia库