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. seaborn可视化散点图并自定义数据轴标签(X轴和Y轴的轴标签,Change X Y Axis Labels to a Seaborn Plot)
  2. SQL Server中各个系统表的作用
  3. [ARM异常]-异常进入和异常退出时的arm core的硬件自动的行为
  4. python功能分享_Python中非常实用的一些功能和函数分享
  5. Docker 多机网络
  6. CodeForces - 1373D Maximum Sum on Even Positions(最大连续子段和)
  7. docker 删除_docker 批量删除镜像
  8. Windows Store App 获取文件及文件夹列表
  9. 这个世界本来就是残酷的,所以你不能怪C++向你展示了世界的本质!
  10. nginx通过反向代理实现未备案域名访问详解
  11. 我的MYSQL学习心得(九) 索引
  12. 拓端tecdat|R语言圆填充( Circle packing)算法圆堆图圆形空间填充算法可视化
  13. java递归实现汉字组词穷举_Javascript迭代、递推、穷举、递归常用算法实例讲解...
  14. 用nginx部署前端项目
  15. Postman Mock Server 使用
  16. 金蝶KIS专业版单据序时簿看不到的问题
  17. 【HL7】快速入门 HL7 协议
  18. 24第六季四小时首播进入倒计时!
  19. Excel技能之计数求和,让你成为高手之路的机车手
  20. AJ1变色龙79.9/阿迪39.9/二裂酵母套盒39.9/有情洗发水9.9/

热门文章

  1. Flutter 不一样的跨平台解决方案
  2. 用pygame写像素游戏地图编辑器
  3. linux 软链接创建及拷贝
  4. 用Java写一个PC端的WIFI-ADB管理软件
  5. eureka集群高可用配置
  6. linux vim输入法切换,完美解决Mac下Vim/Emacs的输入法切换问题
  7. 2020.5.31 牛客“科林明伦杯” A.点对最大值【树形dp】
  8. 导弹发射-河南省第九届省赛D题
  9. 2017字节跳动前端工程师秋招笔试试题解析
  10. Python中万年历的代码实现