[POI2008]BLO

Description

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

Input

输入\(n<=100000\) \(m<=500000\)及\(m\)条边

Output

输出\(n\)个数,代表如果把第\(i\)个点去掉,将有多少对点不能互通。

Sample Input

5 5

1 2

2 3

1 3

3 4

4 5

Sample Output

8

8

16

14

8

考虑到求图中的割点。

图中有两种点

\(1.\)该点不为割点,由割点定义,切掉该点后,剩下的\(n-1\)个点仍然联通,所以答案为\(2*(n-1)\)。

\(2.\)该点为割点,所以,在切掉该点后,图中会出现若干个联通块,我们需要求出每个联通块的大小,两两相乘再相加

我们不妨在\(tarjan\)的过程中,搜索出每棵“子树”的\(size\)。

综上所述,在删除掉一个割点\(i\)后,不联通的有序对数量为:

\(size[S1]*(n-size[S1])+size[S2]*(n-size[S2])+...+size[St]*(n-size[St])+2*(n-1)+(n-size[i])*(size[i]-1)\)

#include<bits/stdc++.h>
#define lll long long
using namespace std;
int read()
{
int x=0,w=1;char ch=getchar();
while(ch>'9'||ch<'0') {if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*w;
}
const int N=100010;
int n,m,cnt,visnum,x,y;
int head[N],dfn[N],low[N],cut[N],size[N];
lll ans[N];
struct node{
int to,next;
}edge[10*N];
void add(int x,int y)
{
cnt++;edge[cnt].to=y;edge[cnt].next=head[x];head[x]=cnt;
}
void tarjan(int k,int fa)
{
dfn[k]=low[k]=++visnum;int flag=0;lll num=0;
for(int i=head[k];i;i=edge[i].next)
{
int v=edge[i].to;if(v==fa) continue;
if(!dfn[v])
{
tarjan(v,k);low[k]=min(low[k],low[v]);size[k]+=size[v];
if(dfn[k]<=low[v])
{
flag++;
if(fa!=0||flag>1)
{
cut[k]=1;ans[k]+=(lll)size[v]*num;
num+=size[v];
}
}
}
else low[k]=min(low[k],dfn[v]);
}
ans[k]+=(lll)((n-num-1)*num);
size[k]++;
}
int main()
{
n=read();m=read();
for(int i=1;i<=m;i++)
{
x=read();y=read();
add(x,y);add(y,x);
}
for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i,0);
for(int i=1;i<=n;i++) printf("%lld\n",2*(ans[i]+n-1));
}

[POI2008]BLO(Tarjan)的更多相关文章

  1. 【BZOJ1123】 [POI2008]BLO (tarjan)

    tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好. ; maxm=; type edgetype=record toward,next:l ...

  2. BZOJ 1123 [POI2008]BLO(Tarjan算法)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1123 [题目大意] Byteotia城市有n个towns,m条双向roads. 每条r ...

  3. [BZOJ1123]:[POI2008]BLO(塔尖)

    题目传送门 题目描述 Byteotia城市有n个towns.m条双向roads.每条road连接两个不同的towns,没有重复的road.所有towns连通. 输入格式 输入n,m及m条边. 输出格式 ...

  4. 【BZOJ4331】[JSOI2012]越狱老虎桥(Tarjan)

    [BZOJ4331][JSOI2012]越狱老虎桥(Tarjan) 题面 BZOJ 然而BZOJ是权限题QwQ 洛谷 题解 先求出所有割边,那么显然要割掉一条割边. 如果要加入一条边,那么显然是把若干 ...

  5. 【BZOJ2208】[JSOI2010]连通数(Tarjan)

    [BZOJ2208][JSOI2010]连通数(Tarjan) 题面 BZOJ 洛谷 题解 先吐槽辣鸡洛谷数据,我写了个\(O(nm)\)的都过了. #include<iostream> ...

  6. 浅谈强连通分量(Tarjan)

    强连通分量\(\rm (Tarjan)\)             --作者:BiuBiu_Miku \(1.\)一些术语   · 无向图:指的是一张图里面所有的边都是双向的,好比两个人打电话 \(U ...

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

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

  8. {part1}DFN+LOW(tarjan)割点

    什么是jarjan? 1)求割点 定义:在无向连通图中,如果去掉一个点/边,剩下的点之间不连通,那么这个点/边就被称为割点/边(或割顶/桥). 意义:由于割点和割边涉及到图的连通性,所以快速地求出割点 ...

  9. 【BZOJ】1051: [HAOI2006]受欢迎的牛(tarjan)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1051 这题还好-1A了..但是前提还是看了题解的 囧.....一开始认为是并查集,oh,不行,,无法 ...

随机推荐

  1. @ResponseBody返回4种数据格式的数据

    1.返回一个键值对或者集合 前端JS请求: //返回值为map的形式 $(".name").blur(function(){ $.ajax({ type:"Post&qu ...

  2. ionic使用自定义icon

    参考文档:https://www.jianshu.com/p/5346fee9fd80  angular+ionic 自定义图标 注意: 这里不用name 用class类名显示出来 最后出来图标是个小 ...

  3. duliu题之狼抓兔子题解

    拖了将近5天的正解和AC.........emmmmm........... 事实告诉我们这种毒瘤题一定要建双向边(用了不知道多少个小时质疑建边的人欲哭无泪) 心态爆炸的传送 题了个面 这是个求最小割 ...

  4. 十六、简单配置jenkins执行本地的robotframework项目

    A.前期准备: 1.登录jenkins 2.系统管理-插件管理-高级-上传插件(http://mirrors.jenkins-ci.org/plugins/robot/,中选择一个版本的插件下载至本地 ...

  5. kafka 配置权限

    参考:https://www.cnblogs.com/huxi2b/p/10437844.html http://kafka.apache.org/documentation/#security_au ...

  6. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第1节 网络通信概述_5_端口号

  7. 多进程---multiprocessing/threading/

    一.多进程:multiprocessing模块 多用于处理CPU密集型任务 多线程 多用于IO密集型任务 Input Ouput 举例: import multiprocessing,threadin ...

  8. nw打包vue项目exe更换图标

    web项目用nw打包好了之后发现没办法更换桌面显示图标问题,找了一下发现大多推荐Resource进行最后更换,试了第一次怎么也不管用,电脑重启了一下就行了...... 首先下载安装好了Resource ...

  9. hadoop 与 hbase 添加开机启动,按顺序,先hadoop,后hbase,开机启动脚本,hbase学习

    hadoop安装,hbase单机安装,参考链接,https://blog.csdn.net/LiuHuan_study/article/details/84347262 开机启动脚本,参考, http ...

  10. K近邻实战手写数字识别

    1.导包 import numpy as np import operator from os import listdir from sklearn.neighbors import KNeighb ...