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. 一句 Task.Result 就死锁, 这代码还怎么写?

    一:背景 1. 讲故事 前些天把 .NET 高级调试 方面的文章索引到 github 的过程中,发现了一个有意思的评论,详见 文章,截图如下: 大概就是说在 Winform 的主线程下执行 Task. ...

  2. MySQL redo与undo日志解析

    前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍.相对于其他几种日志而言, redo log 和 undo log 是更 ...

  3. Codeforces Round #713 (Div. 3)AB题

    Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...

  4. ACM基础板子

    新生赛以后就正式成为一名acmer啦 ~虽然没有打过比赛呜呜呜 要好好学算法,拿一个牌牌嘛~ 这里就记录算法学习情况,也怕自己偷懒,学一个就记录,看看长时间拖更就是在摸鱼,摸鱼和鸽子都是本质 ,加油! ...

  5. 《Spring 手撸专栏》第 3 章:初显身手,运用设计模式,实现 Bean 的定义、注册、获取

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你是否能预见复杂内容的设计问题? 讲道理,无论产品功能是否复杂,都有很大一部分程序员 ...

  6. 要求用户输入若干员工信息,格式为: name,age,gender,salary,hiredate

    package day06; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util. ...

  7. JAVA基础——标识符和数据类型

    注释 单行注释 // 多行注释 /* */ 文档注释 /***/ 标识符和关键字 所有的标识符都应该以字母(A-Z或者a-z),美元符号($),或者下划线(_)开始 首字符之后可以时字母(A-Z或者a ...

  8. [Python] 基本概念

    1.基本概念 三大特性:封装.继承.多态 继承:派生类继承基类的字段和方法 多态:对不同类型的变量进行相同的操作,却表现出不同的行为(例如对数字和字符做"+"运算) 封装:将数据和 ...

  9. (代替人类)很多操作都在Settings里面。 5.安装第三方库

    2020-02-01 pycharm 使用教程 LingSmart关注 0.0842020.02.07 15:08:50字数 1,394阅读 680 实在无聊,就来学习吧.学习pycharm的使用教程 ...

  10. 第3期:Too many open files以及ulimit的探讨

    第3期:Too many open files以及ulimit的探讨 毛帅 Java.AI.互联网.金融 10 人赞同了该文章 Too many open files是Java常见的异常,通常是由于系 ...