tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好。

 1 const maxn=100419;
 2  maxm=1000419;
 3 type
 4  edgetype=record
 5   toward,next:longint;
 6  end;
 7
 8 var
 9  edge:array[0..maxm] of edgetype;
10  first,dfn,low,stack,s:array[0..maxn] of longint;
11  pd:array[0..maxn] of boolean;
12  sum:array[0..maxn] of int64;
13  tot,cnt,i,n,m:longint;
14
15 function min(x,y:longint):longint; begin if x<y then exit(x) else exit(y); end;
16
17 procedure addedge(i,j:longint);
18 begin
19  inc(tot);
20  edge[tot].toward:=j;
21  edge[tot].next:=first[i];
22  first[i]:=tot;
23 end;
24
25 procedure add(i,j:longint);
26 begin
27  addedge(i,j); addedge(j,i);
28 end;
29
30 procedure tarjan(v:longint);
31 var i,tmp,son:longint;
32 begin
33  son:=0;
34  inc(cnt); dfn[v]:=cnt; low[v]:=cnt;
35  pd[v]:=true; s[v]:=1;
36  i:=first[v];
37  while i<>0 do
38   begin
39    tmp:=edge[i].toward;
40    if dfn[tmp]=0 then
41     begin
42      tarjan(tmp);
43      s[v]:=s[v]+s[tmp];
44      low[v]:=min(low[v],low[tmp]);
45      if dfn[v]<=low[tmp] then
46       begin
47        sum[v]:=sum[v]+int64(son)*s[tmp];
48        inc(son,s[tmp]);
49       end;
50     end
51    else low[v]:=min(dfn[tmp],low[v]);
52    i:=edge[i].next;
53   end;
54  sum[v]:=sum[v]+int64(son)*(n-son-1);
55 end;
56
57 procedure init;
58 var i,a,b:longint;
59 begin
60  readln(n,m);
61  for i:= 1 to m do
62   begin
63    readln(a,b);
64    add(a,b);
65   end;
66  tarjan(1);
67 end;
68
69 Begin
70  init;
71  for i:= 1 to n do writeln((sum[i]+n-1)<<1);
72 End.

转载于:https://www.cnblogs.com/EC-Ecstasy/p/4224940.html

【BZOJ1123】 [POI2008]BLO (tarjan)相关推荐

  1. 【BZOJ1123】[POI2008]BLO【割顶】

    [题目链接] 题意可见discuss. 用Tarjan求割顶,然后对割顶的所有子树求点对个数(前缀和扫一遍),最后把自身和其他点的答案加上. 没注意边,数组开小了. /* Pigonometry */ ...

  2. 洛谷 P3387 【模板】缩点 (tarjan)

    展开 题目背景 缩点+DP 题目描述 给定一个 nn 个点 mm 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重 ...

  3. 【bzoj1123】[POI2008]BLO

    *题目描述: Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. *输入 输入n<=1000 ...

  4. 【JDK7】新特性(2) 语法

    2019独角兽企业重金招聘Python工程师标准>>> JDK7对Java语法有少量更新,重点是在易用性和便捷性的改进.     1.二进制字面量 JDK7开始,终于可以用二进制来表 ...

  5. 【Python】将字典(dict)转化为Dataframe

    [Python]将字典(dict)转化为Dataframe_张欣的博客-CSDN博客_python字典转dataframe dictory = {'a':1,'b':2} df = pd.DataFr ...

  6. 【 MATLAB 】离散傅里叶级数(DFS)与DFT、DTFT及 z变换之间的关系

    上篇博文我们简单的讨论了离散傅里叶级数DFS和离散傅里叶变换DFT之间的关系,简单地说,DFT就是DFS在一个周期内的表现. [ MATLAB ]离散傅里叶变换(DFT)以及逆变换(IDFT)的MAT ...

  7. 【FPGA】Buffer专题介绍(三)

    目录 背景 IOBUF IOBUFDS OBUF OBUFDS OBUFT OBUFTDS 背景 首先给出这个专题的第一个地址:[FPGA]Buffer专题介绍(一) 第二篇的地址:[FPGA]Buf ...

  8. 【FPGA】Buffer专题介绍(二)

    目录 背景 IBUF IBUFDS IBUFG IBUFGDS 背景 这篇博文是下面这篇博文的继续: [FPGA]Buffer专题介绍(一) 但介绍方式我想放的更自由一点,要不然就是官方文档了. IB ...

  9. 【FPGA】Buffer专题介绍(一)

    目录 背景 BUFG BUFGCE BUFGCE_1 BUFGMUX and BUFGMUX_1 BUFGP BUFH BUFIO2 BUFIO2FB 背景 在数据手册 Spartan-6 Libra ...

最新文章

  1. MySQL 存储过程传参之in, out, inout 参数用法
  2. linux 压缩 解压zip 命令
  3. div中定义局部变量_说说 Go 中的变量(附粗制滥造面试题)
  4. 离散蚁群算法实例(求解旅行商问题)
  5. 智能手机的开放与封闭刍议
  6. 前端中标签页的手写方法
  7. Windows搭建SonarQube_Mysql
  8. MATLAB程序详细解析,遗传算法——matlab代码解析
  9. [C++]二维数组还是一维数组?
  10. 全面 Severless 化只需要 7天!看南瓜电影的云上升级
  11. 全“芯”升级,浩辰CAD 2021赋能全国产化CAD应用
  12. 3.Ubuntu 安装Pinta图片处理工具
  13. centos6.5安装openoffice和swftools 错误信息
  14. 极路由1S刷openwrt
  15. PhpStorm中实现代码自动换行
  16. mysql的reorg_DB2 runstats和reorg操作
  17. BK05-蓝鲸智云-标准部署-关键模块逐步操作
  18. Java 优惠券最优使用实现
  19. 课程所用软件下载地址
  20. HBuilder 代码缩放快捷键

热门文章

  1. 让机器搞懂100万种隐含语义 腾讯Peacock模型全揭秘
  2. 在caffe上跑自己的数据
  3. 明星居然来我们宜昌保利时代拍戏——电影《被光抓走的人》
  4. 量产车发布前夕,乐视在美汽车工厂被传欠薪停工
  5. C++对象模型详解(上)
  6. rpm包管理功能全解
  7. hdu5246 超级赛亚ACMer (百度之星初赛)(模拟)
  8. 写给程序员的最好的13条建议
  9. OCP 042全真试题讲解
  10. 『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)