BLO

内存限制:162 MiB 时间限制:1000 ms 标准输入输出
 
 

题目描述

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

输入格式

输入n<=100000 m<=500000及m条边

输出格式

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

样例

样例输入

5 5
1 2
2 3
1 3
3 4
4 5

样例输出

8
8
16
14
8

首先如果这个点不是割点,那么显然该点删去后对除了此点以外所有点之间的点对关系不造成影响,影响的只是当前点与其他点之间点对。所以贡献$2*(n-1)$

然后如果这个点是个割点,这个点可以分割后具体可以分成这几部分,

一,直接与原图相连的连通块

二,图剩余部分

三,节点自身

考虑这三部分的贡献

对于二:

它与除了连通块外点构成点对都被拆散

那么贡献为$size[y]\times (n-size[y])$

我们算的是单方向点对

对于三:

它分割以后与其他所有点点对都被拆散

对于一:

我们用一个小容斥,然后贡献类似于二

完了

以下依然是本人丑陋的代码

#include<bits/stdc++.h>
#define ll long long
#define A 1000000
#define read(a) scanf("%lld",&a)
#define put(a) printf("%lld\n",a)
using namespace std;
ll low[A],size[A],dfn[A],head[A],ver[A],nxt[A],tot=0,cut[A],ans[A];
ll n,m,num=0,root;
void add(ll x,ll y){
ver[++tot]=y;nxt[tot]=head[x];head[x]=tot;return ;
}
void tarjan(ll x){
low[x]=dfn[x]=++num;size[x]=1;
ll flag=0,sum=0;
//若不为割点ans可以被其他n-1个点贡献
//若为割点ans可以由剩余n-sum-1个点贡献以及这个点不能到达其他任何点以及其他与x直接连接点到达不了其他点
for(ll i=head[x];i;i=nxt[i]){
ll y=ver[i];
if(!dfn[y]){
tarjan(y);
size[x]+=size[y]; low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x]){
flag++;sum+=size[y];ans[x]+=size[y]*(n-size[y]);
if(x!=root||flag>1){
cut[x]=1;
}
}
}
else low[x]=min(low[x],dfn[y]);
}
if(cut[x]) ans[x]+=(n-sum-1)*(sum+1)+n-1;//,printf("贡献ans[%lld]=%lld\n",x,ans[x]);
else ans[x]=2*(n-1);//,printf("贡献ans[%lld]=%lld 2*(n-1)=%lld\n",x,ans[x],2*n-1);
}
int main(){
read(n),read(m);
for(ll i=1;i<=m;i++){
ll xx,yy;read(xx),read(yy);add(xx,yy);add(yy,xx);
}
for(ll i=1;i<=n;i++)
if(!dfn[i])root=i,tarjan(i);
for(ll i=1;i<=n;i++){
//printf("size[i]=%lld cut[%lld]=%lld\n",size[i],i,cut[i]);
put(ans[i]);
}
}

注意

            if(low[y]>=dfn[x]){
flag++;sum+=size[y];ans[x]+=size[y]*(n-size[y]);
if(x!=root||flag>1){
cut[x]=1;
}
}

中sum ans都要放在判断割点之上,因为我们算的在根上也要照常计算

BLO的更多相关文章

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

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

  2. BZOJ 1123: [POI2008]BLO

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

  3. BZOJ1123: [POI2008]BLO

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

  4. BZOJ 1123: [POI2008]BLO( tarjan )

    tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------- ...

  5. bzoj 1123 [POI2008]BLO Tarjan求割点

    [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1540  Solved: 711[Submit][Status][Discu ...

  6. 【bzoj1123】BLO

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

  7. [POI2008]BLO(Tarjan)

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

  8. BZOJ 1123 BLO

    tarjan求割点计算答案.注意不是每一棵子树都算答案.开个变量记一下. #include<iostream> #include<cstdio> #include<cst ...

  9. 【UOJ】67 新年的毒瘤 &【BZOJ】1123 BLO

    [UOJ 67] 题目链接: 传送门 题解: 第一眼很懵逼……这什么鬼. 思考什么点复合条件……(o(>﹏<)o 1.树,也就是说还剩n-2条边,等价于要删去一个度数为m-n+2的点. 2 ...

随机推荐

  1. 『政善治』Postman工具 — 10、Postman中对Cookie的操作

    目录 1.往常的Cookie处理方式 2.Postman中的Cookie管理机制 3.自定义Cookie管理内容 在接口测试中,某些接口的调用,需要带入已有Cookie,比如有些接口需要登陆后才能访问 ...

  2. 如何将代码托管到Github

    Github是最火热的源代码管理平台,你可以通过这个平台,将代码托管起来,防止代码丢失,或者将自己的代码展示给世界. 首先要下载Git,请自行在各大应用平台下载. 下载完成后,在你的菜单上下文中就会出 ...

  3. 面试题:ArrayList、LinkedList、Vector三者的异同?

    面试题:ArrayList.LinkedList.Vector三者的异同? 同:三个类都是实现了List接口(Collection的子接口之一),存储数据的特点相同:存储有序的.可重复的数据不同: * ...

  4. 在微信框架模块中,基于Vue&Element前端的事件和内容的管理

    在微信后台管理中,我们需要定义好菜单对应的事件管理,因为微信通过菜单触发相关的事件,因此菜单事件的响应关系,我们如果处理好,就能构建出我们的微信应用入口了.通过入口,我们可以响应用户菜单的事件,如响应 ...

  5. 原生JS和jQuery创建元素的方法

    jQ创建元素的方法 1.原生代码 .creatElement('tr')` .innerHTML = '<h1>加油</h1>' document.write('<h1& ...

  6. Flutter 2.2 更新详解

    Flutter 2.2 版已正式发布!要获取新版本,您只需切换到 stable 渠道并更新目前安装的 Flutter,或前往 flutter.cn/docs/get-started 从头开始安装. 虽 ...

  7. 用JIRA管理你的项目——(一)JIRA环境搭建

    JIRA,大家应该都已经不陌生了! 最初接触这个工具的时候,我还在一味地单纯依靠SVN管理代码,幻想着SVN可以有个邮件通知,至少在项目成员进行代码修改的时候,我可以第一时间通过邮件获得这个消息! 当 ...

  8. nginx负载均衡搭建phpmyadmin加入redis了解session会话原理

    myphpadmin项目理解cookie和session 当我们平时上网的时候,在刷新之后或者退出浏览器再次打开浏览器不需要登陆网页了,这就是利用了cookie和session: 环境配置 hostn ...

  9. 008.kubernets的调度系统之标签选择器

    一 Kubernetes 调度简介 除了让 kubernetes 集群调度器自动为 pod 资源选择某个节点(默认调度考虑的是资源足够,并且 load 尽量平均),有些情况我们希望能更多地控制 pod ...

  10. shell基础之exit,break,continue

    exit代码: 1 #!/bin/bash 2 echo "Is it morning? Please answer yes or no." 3 read YES_OR_NO 4 ...