割点的好题。

联通图,难度降低。首先对于一个点,如果他不是割点,那它的贡献是2*(n-1),就是任何一个其他节点都少了正反两个数对,这个看样例可以看出来。

如果它是一个割点,去掉他以后会出现若干个联通块,而这些联通块两两之间不相连,把它们的大小两两相乘即可。

我们知道,在进行tarjan时会跑出一颗搜索树,我们直接记size[x]表示以x为根节点的子树大小,在找到一个割点时,low值大于dfn[x]的子树们各自为家,剩下的会构成另一棵大的子树。这样的话,根据(乘法结合律)原理即可得出:

ans[x]=size[s1]*(n-size[s1])+size[s2]*(n-size[s2])+……+1*(n-1)+(n-1-∑k=1->tsize[sk])*(1+∑k=1->tsize[sk]) (抄式子就是爽)。

一开始NC了,把sum放判断外面了,那这样更出来的sum就不是能作出上式贡献的size了。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
int read(){
int sum=,f=;char x=getchar();
while(x<''||x>''){
if(x=='-') f=-;
x=getchar();
}while(x>=''&&x<=''){
sum=sum*+x-'';
x=getchar();
}return sum*f;
}
struct EDGE{
int ed,nex;
}edge[];int first[],num;
int n,m,ord,root=;
int dfn[],low[];
bool cut[];
long long ans[],size[];
void add(int st,int ed){
edge[++num].ed=ed;
edge[num].nex=first[st];
first[st]=num;
}
void tarjan(int x){
dfn[x]=low[x]=++ord;
size[x]=;
int child=,sum=;
for(int i=first[x];i;i=edge[i].nex){
int y=edge[i].ed;
if(!dfn[y]){
tarjan(y);
size[x]+=size[y];
low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x]){
child++;
ans[x]+=1ll*size[y]*(n-size[y]);
sum+=size[y];
}
}else low[x]=min(low[x],dfn[y]);
}if((x!=root&&child>)||(x==root&&child>=))
/*cout<<"cut is "<<x<<endl,*/ ans[x]+=1ll*(n--sum)*(sum+)+n-;
else ans[x]=*(n-);
}
int main(){
n=read();m=read();
for(int i=,x,y;i<=m;i++){
x=read();y=read();
add(x,y);add(y,x);
}
tarjan(root);
/* for(int i=1;i<=n;i++)
cout<<size[i]<<" ";cout<<endl;*/
for(int i=;i<=n;i++)
printf("%lld\n",ans[i]);
return ;
}

BZOJ1123 BLO的更多相关文章

  1. 割顶树 BZOJ1123 BLO

    无向图中,求去掉点x[1,n]后每个联通块的大小. 考虑tarjan求bcc的dfs树,对于每个点u及其儿子v,若low[v]<prv[u],则v对u的父亲联通块有贡献,否则对u的子树有贡献.每 ...

  2. 有关图的连通性的Tarjan算法

    割点与桥 在一个无向连通图中,若将某个点及其相连的边删除后,图就不连通了,则这样的点被称为割点. 在一个无向连通图中,若将某条边删除后,图就不连通了,则这样的边被称为割边,即桥. 在一张图中求出割点或 ...

  3. 【BZOJ-1123】BLO Tarjan 点双连通分量

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 970  Solved: 408[Submit][Status][ ...

  4. BZOJ1123: [POI2008]BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 614  Solved: 235[Submit][Status] ...

  5. 【bzoj1123】BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2222  Solved: 1090[Submit][Status ...

  6. 【dfs+连通分量】Bzoj1123 POI2008 BLO

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...

  7. BLO(bzoj1123)

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

  8. BZOJ1123:[POI2008]BLO(双连通分量)

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...

  9. 【bzoj1123】[POI2008]BLO DFS树

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

随机推荐

  1. python之paramiko 远程执行命令

    有时会需要在远程的机器上执行一个命令,并获得其返回结果.对于这种情况,python 可以很容易的实现. 1 .工具 Python paramiko 1) Paramiko模块安装 在Linux的Ter ...

  2. 你不知道的css各类布局(一)之固定布局、静态布局

    前言 当为大量用户设计网站时,设计人员必须考虑到访问者的差异: 屏幕分辨率, 浏览器的选择, 是否在浏览器最大化状态, 浏览器的额外工具栏的开启(历史记录,书签等), 操作系统和硬件. 我们知道css ...

  3. opencv3.3 CUDA 初学实例

    //swap.cu #include "cuda_runtime.h" #include "device_launch_parameters.h" #inclu ...

  4. Java8 常用Function、Predicate、Consumer、Supplier接口

    1.常用函数是接口: (1)Function<T, R> => R apply(T t) ———— 接受一个T类型的参数,返回R类型结果. Function<Integer, ...

  5. spring注解定时器

    上一篇文章写了一个在配置文件中设置时间的定时器,现在来写一个注解方式的定时器: 1.工程结构如下: 2.需要执行的代码块: package com.Task; import org.springfra ...

  6. npm 设置淘宝镜像

    永久 npm config set registry https://registry.npm.taobao.org 直接安装 cnpm 替代 npm npm install -g cnpm --re ...

  7. 卡片拖拽(vue拖拽事件)

    <template> <div class="wrapper wrapper-content" id="main" v-cloak> & ...

  8. centos8/redhat8 无法上网,通过启动systemctl start NetworkManger搞定

    在systemd里面,可以直接使用systemctl进行管理 启动:systemctl start NetworkManger 关闭:systemctl stop NetworkManager 开机启 ...

  9. python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用

    python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...

  10. python3之POST请求URL

    方法一:使用requests模块 import requests as rq import json def funcpost(): url = 'http://www.***.com/' # 需要请 ...