Description


Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。

输入n<=100000 m<=500000及m条边

Solution


若图是点双连通的,那么无论删掉哪个点都不影响答案
考虑建出圆方树,我们统计的实际上是经过点x的路径数量,这个统计一下树上的size然后就可以算答案了
注意答案是双向的。。要乘2开LL

Solution


#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stack>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)typedef long long LL;
const int N=200005;
const int E=1000005;struct Graph {struct edge {int y,next;} e[E];int ls[N],edCnt;void add_edge(int x,int y) {e[++edCnt]=(edge) {y,ls[x]}; ls[x]=edCnt;e[++edCnt]=(edge) {x,ls[y]}; ls[y]=edCnt;}
} G,T;std:: stack <int> stack;int dfn[N],low[N],tot,n;LL ans[N],size[N];bool vis[N];int read() {int x=0,v=1; char ch=getchar();for (;ch<'0'||ch>'9';v=(ch=='-')?(-1):(v),ch=getchar());for (;ch<='9'&&ch>='0';x=x*10+ch-'0',ch=getchar());return x*v;
}void dfs1(int now,int from) {dfn[now]=low[now]=++dfn[0];vis[now]=true;for (int i=G.ls[now];i;i=G.e[i].next) {if ((i^1)==from) continue;if (!dfn[G.e[i].y]) {stack.push(i); dfs1(G.e[i].y,i);low[now]=std:: min(low[now],low[G.e[i].y]);if (dfn[now]<=low[G.e[i].y]) {int y=0; tot++;while (y!=i) {y=stack.top(); stack.pop();T.add_edge(G.e[y].y,tot);// printf("%d %d\n", tot,G.e[y].y);}T.add_edge(now,tot);// printf("%d %d\n", now,tot);}} else if (vis[G.e[i].y]) low[now]=std:: min(dfn[G.e[i].y],low[now]);}vis[now]=false;
}void dfs2(int now,int fa) {size[now]=(now<=n);for (int i=T.ls[now];i;i=T.e[i].next) {if (T.e[i].y==fa) continue;dfs2(T.e[i].y,now);ans[now]+=size[now]*size[T.e[i].y];size[now]+=size[T.e[i].y];}ans[now]+=(size[now])*(n-size[now]);
}int main(void) {T.edCnt=G.edCnt=1;n=tot=read(); int m=read();rep(i,1,m) G.add_edge(read(),read());dfs1(1,0);dfs2(1,0);rep(i,1,n) printf("%lld\n", ans[i]*2LL);return 0;
}

bzoj1123 [POI2008]BLO 圆方树相关推荐

  1. [APIO2018] Duathlon 铁人两项 圆方树,DP

    [APIO2018] Duathlon 铁人两项 LG传送门 圆方树+简单DP. 不会圆方树的话可以看看我的另一篇文章. 考虑暴力怎么写,枚举两个点,答案加上两个点之间的点的个数. 看到题面中的一句话 ...

  2. LOJ.2587.[APIO2018]铁人两项Duathlon(圆方树)

    题目链接 LOJ 洛谷P4630 先对这张图建圆方树. 对于S->T这条(些)路径,其对答案的贡献为可能经过的所有点数,那么我们把方点权值设为联通分量的大小,可以直接去求树上路径权值和. 因为两 ...

  3. [APIO2018]铁人两项——圆方树+树形DP

    题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方 ...

  4. [学习笔记]圆方树广义圆方树

    引入 偶尔,我们会遇到一些要在无向图/仙人掌上做的问题,这些问题如果在树上就会比较方便,那么我们就开始考虑能不能把原图等效成一棵树,然后就可以方便地乱搞了? 圆方树就是一种将无向图/仙人掌变成树的数据 ...

  5. 【loj#2524】【bzoj5303】 [Haoi2018]反色游戏(圆方树)

    题目传送门:loj bzoj 题意中的游戏方案可以转化为一个异或方程组的解,将边作为变量,点作为方程,因此若方程有解,方程的解的方案数就是2的自由元个数次方.我们观察一下方程,就可以发现自由元数量=边 ...

  6. 洛谷P4630 [APIO2018] Duathlon 铁人两项 【圆方树】

    题目链接 洛谷P4630 题解 看了一下部分分,觉得树的部分很可做,就相当于求一个点对路径长之和的东西,考虑一下能不能转化到一般图来? 一般图要转为树,就使用圆方树呗 思考一下发现,两点之间经过的点双 ...

  7. [BZOJ2125]最短路(圆方树DP)

    题意:仙人掌图最短路. 算法:圆方树DP,$O(n\log n+Q\log n)$ 首先建出仙人掌圆方树(与点双圆方树的区别在于直接连割边,也就是存在圆圆边),然后考虑点u-v的最短路径,显然就是:在 ...

  8. 【CF487E】Tourists【圆方树】【树链剖分】【multiset】

    题意:给一张 nnn 点 mmm 边的连通无向图,点帯权,qqq 次操作: 修改一个点的权值. 询问两点间所有简单路的最小权值的最小值. n,m,q≤105n,m,q\leq 10^5n,m,q≤10 ...

  9. 【SDOI2018】战略游戏【圆方树】【虚树】

    题意:给一张 nnn 点 mmm 边的连通无向图,qqq 次询问,每次给出一个点集 SSS ,求有多少个不在 SSS 中的点满足删除后 SSS 中存在两个点不连通. n≤105,m≤2×105,∑∣S ...

最新文章

  1. 51单片机 小车 L298N pwm调速 串口控制 按键控制
  2. SAP零售行业解决方案初阶 3 - WB01 创建Site Master
  3. 转义序列Escape Sequences及Linux echo命令多种颜色显示
  4. 软件开发基本原则(一)—— 策略和因素 (转)
  5. 用ironpython驱动你的计算公式
  6. 元宇宙iwemeta:互联网行业年底清算,税收优惠门槛抬高,阿里巴巴多交41亿税款
  7. Blending and Bagging
  8. 对于一颗具有n个结点,度为4的树来说,( )
  9. mysql数据迁移 脚本_PHP将数据从Oracle向Mysql数据迁移实例
  10. 【Java注解】自定义注解、与数据库结合使用
  11. github迁移到gitee相关问题
  12. long类型怎么转换成string_Python知识点-Python变量类型有哪些?
  13. LeetCode 257. Binary Tree Paths (二叉树路径)
  14. 42岁老码农找工作记录
  15. Linux下安装composer报错 The openssl extension is missing / The zlib extension is not loaded等等
  16. 解决git 命令出现end问题
  17. PHP获取照片exif信息
  18. 高级c语言程序设计视频教程,C语言高级编程视频教程
  19. math_等式不等式:平方开根号绝对值绝对值不等式放缩基本不等式均值不等式_一元二次方程复根
  20. zookeeper详解

热门文章

  1. 每天学命令all_inputs
  2. SQL Server 2014 无法连接到服务器
  3. 3500字干货 | 大家都在谈的数据思维,到底要怎么建立?
  4. Teamview免费版连接超限解决办法
  5. L2-027. 名人堂与代金券
  6. python爬取豆瓣电影top250_用Python爬取豆瓣电影TOP250分析
  7. 最酷网学习,如何做一个轮播
  8. 发力数字化转型,容智信息携自研创新科技惊艳亮相2021世界人工智能大会
  9. 对偶量子计算机,广义量子干涉原理及对偶量子计算机
  10. 虚拟机VM利用U盘重装系统