BZOJ 1123 [POI2008]BLO(Tarjan算法)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1123
【题目大意】
Byteotia城市有n个towns,m条双向roads. 每条road连接两个不同的towns,
没有重复的road. 所有towns连通。输出n个数,代表如果把第i个点去掉,将有多少对点不能互通。
【题解】
Tarjan算法的基础应用,如果x是y分支的割点,那么y就参与x点的答案贡献计数,
将割点为x的不同分支的size进行动态乘即可。
【代码】
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <vector>
- using namespace std;
- typedef long long LL;
- const int N=100010,M=500010;
- int n,m,g[N],v[M<<1],nxt[M<<1],ed;
- int dfn[N],low[N],num;
- LL ans[N],size[N];
- void add_edge(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
- void tarjan(int x){
- dfn[x]=low[x]=++num;
- size[x]=1; LL tmp=0;
- for(int i=g[x];i;i=nxt[i])if(!dfn[v[i]]){
- int y=v[i];
- tarjan(y);
- size[x]+=size[y];
- if(low[x]>low[y])low[x]=low[y];
- if(dfn[x]<=low[y]){//x是割点
- ans[x]+=tmp*size[y];
- tmp+=size[y];
- }
- }else if(low[x]>dfn[v[i]])low[x]=dfn[v[i]];
- ans[x]+=tmp*(n-tmp-1);
- }
- void init(){ed=0;memset(g,0,sizeof(g));}
- int main(){
- while(~scanf("%d%d",&n,&m)){
- init();
- memset(ans,0,sizeof(ans));
- while(m--){
- int x,y;
- scanf("%d%d",&x,&y);
- add_edge(x,y);
- add_edge(y,x);
- }tarjan(1);
- for(int i=1;i<=n;i++)printf("%lld\n",(ans[i]+n-1)<<1);
- }return 0;
- }
BZOJ 1123 [POI2008]BLO(Tarjan算法)的更多相关文章
- BZOJ 1123: [POI2008]BLO( tarjan )
tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------- ...
- bzoj 1123 [POI2008]BLO Tarjan求割点
[POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1540 Solved: 711[Submit][Status][Discu ...
- BZOJ 1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1030 Solved: 440[Submit][Status] ...
- bzoj 1123 [POI2008]BLO——点双连通分量
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 点双连通分量缩点,然后各种各样. 结果不会写了.比如新连边.记录一个点是割点缩成的点还 ...
- BZOJ 1123: [POI2008]BLO 求割点_乘法原理_计数
Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...
- 【BZOJ-1123】BLO Tarjan 点双连通分量
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 970 Solved: 408[Submit][Status][ ...
- BZOJ1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 614 Solved: 235[Submit][Status] ...
- [POI2008]BLO(Tarjan)
[POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...
- 关于连通性问题的Tarjan算法暂结
关于基础知识的预备桥和割点.双联通分量.强连通分量,支配树.(并不会支配树) 关于有向图的Tarjan,是在熟悉不过的了,它的主要功能就是求强联通分量,缩个点,但是要注意一下构建新图的时候有可能出现重 ...
随机推荐
- python初步学习-查看文档及数据类型转换
学会查看文档 python最权威的文档就是官方文档,因此,我们要学会查看官方文档.而在python解释器中,help() 命令就可以很权威的查看官方文档. 因此,我们要学会使用 help() 命令. ...
- python初步学习-python数据类型之strings(字符串)
数据类型-字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号(''或者"")来创建字符串 var1 = 'Hello World!' var2 = "P ...
- CursorFileManager对cursor文件的读写
public class CursorFileManager implements CursorManager{public void write(String key, LongCursor cur ...
- Caffe学习笔记4图像特征进行可视化
Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...
- Linux 入门记录:四、Linux 系统常用命令
一.日期时间 命令 date 查看.设置当前系统时间: date -u 格林威治时间 date %Y-%m-%d 显示格式化的时间 date -s "23:00" 使用 -s 参数 ...
- HDU 6186 CS Course 前缀和,后缀和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6186 题意:给了n个数,然后有q个查询,每个查询要求我们删掉一个数,问删掉这个数后整个序列的与值,或值 ...
- 网站服务器压力Web性能测试(4):服务器压力Web性能测试小结
1.Apache Bench,Webbench,http_load对网站压力Web性能进行测试时,为了得到更加客观和准确的数值,应该从远程访问.局域网访问和本地等多个方面进行全方位的测试.一般用127 ...
- 文字顺时针旋转90度(纵向)&古诗词排版
1.文字旋转90度 width: 100px; height: 200px; line-height: 100px; text-align: center; writing-mode: vertica ...
- JS对象转化为JSON字符串
js方法: JSON.stringify 把一个对象转换成json字符串 JSON.parse 把一个json字符串解析成对象. 实例: var jsObj = {}; jsObj.testArray ...
- mui 怎样监听scroll事件的滚动距离
var scroll = mui('.mui-scroll-wrapper').scroll(); document.querySelector('.mui-scroll-wrapper' ).add ...