题目传送门


题目描述

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


输入格式

输入n,m及m条边。


输出格式

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


样例

样例输入:

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

样例输出:

8
8
16
14
8


题解

看到这道题,应该想到缩点。

首先,如果一个点不是割点,那么把它去掉,不会影响与它无关的点对,那么,去掉它之后,减少的点对的个数即为2n-2。

如果这个点是割点,那么去掉它,减少的点对个数不止2n-2,还需要将所有与他它通的联通块的大小两两相乘再相加。

考虑塔尖,在深度优先遍历的同时就能够完成统计答案的工作。

那么,删除一个割点后,减少的点对数量即为:

$ size[ s_{1} ]×(n-size[ s_{1} ])+size[ s_{2} ]×(n-size[ s_{2} ])+...+size[ s_{t} ]×(n-size[ s_{t} ])+n-1+(n-1- \sum \limits_{k=1}^{t} size[ s_{k} ])×(1+ \sum \limits_{k=1}^{t} size[ s_{k} ])$


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec
{
int nxt;
int to;
}e[1000001];
int head[100001],cnt;
int n,m;
int dfn[100001],low[100001],size[100001],tot;
long long ans[100001];
bool cut[100001];
void add(int x,int y)
{
e[++cnt].nxt=head[x];
e[cnt].to=y;
head[x]=cnt;
}
void tarjan(int x)
{
dfn[x]=low[x]=++tot;
int flag=0,sum=0;
size[x]=1;
for(int i=head[x];i;i=e[i].nxt)
{
if(!dfn[e[i].to])
{
tarjan(e[i].to);
size[x]+=size[e[i].to];
low[x]=min(low[x],low[e[i].to]);
if(low[e[i].to]>=dfn[x])
{
flag++;
sum+=size[e[i].to];//用来最后的∑
ans[x]+=1LL*size[e[i].to]*(n-size[e[i].to]);//先统计进去
if(x!=1||flag>1)cut[x]=1;
}
}
else low[x]=min(low[x],dfn[e[i].to]);
}
if(cut[x])ans[x]+=1LL*(n-sum-1)*(sum+1)+n-1;//如果是割点
else ans[x]=2*n-2;//如果不是割点
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==y)continue;
add(x,y);
add(y,x);
}
tarjan(1);
for(int i=1;i<=n;i++)
printf("%lld\n",ans[i]);
return 0;
}

rp++

[BZOJ1123]:[POI2008]BLO(塔尖)的更多相关文章

  1. BZOJ1123: [POI2008]BLO

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

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

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

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

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

  4. bzoj1123 [POI2008]BLO——求割点子树相乘

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 思路倒是有的,不就是个乘法原理吗,可是不会写...代码能力... 写了一堆麻麻烦烦乱七 ...

  5. BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...

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

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

  7. BZOJ 1123: [POI2008]BLO

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

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

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

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

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

随机推荐

  1. 将磁盘从FAT格式转换为NTFS格式的方法

    不需要进行格式化,只需在命令提示符中输入如下内容:CONVERT X:/FS:NTFS把X换成你需要的盘符,转一个盘需十几或几十秒不等..注意:此方法不可逆转,FAT32转到NTFS后不可转回,当然也 ...

  2. webmagic学习之路-2:采集安居客经纪人列表

    相比较 1 稍微成熟了一点,会用的东西多了. 正则用的不好,很多东西不会,大神轻喷! package com.action; import java.util.ArrayList; import ja ...

  3. wpf之二进制资源

    一.当需要添加图片.音频.视屏的资源到wpf项目里是,可以直接把文件添加到项目里 右击add->existing item. 1.如果想将外部文件编异常目标成为二进制资源,在文件的属性窗口 Bu ...

  4. redis的keys常用操作及redis的特性

    redis的keys常用操作 1.获得所有的keys: keys * 2.可以模糊查询 keys:keys  my* 3.删除keys:del mymkey1 mykey2 4.是否存在keys:ex ...

  5. 【JavaScript】js中的call方法

    moziila官方文档链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Funct ...

  6. CSS3总结二:(background)背景/渐变色函数

    background-color(CSS2) background-image background-position background-size background-repeat backgr ...

  7. JavaMaven【三、常用指令】

    mvn compile --编译,编译后生成target文件,里面包含classes mvn test --执行test,测试后在target下生成reports文件夹,测试报告 mvn packag ...

  8. 第十章、random模块

    目录 第十章.random模块 第十章.random模块 #随机生成0-1之间的小数 import random print(random.random()) print(random.randint ...

  9. linux网络协议栈(四)链路层 vlan处理

    转:http://blog.csdn.net/u010246947/article/details/18224517 4.6.VLAN处理: 4.6.1.vlan原理 对于带vlan的以太网报文,其以 ...

  10. linux获取保留yum源、并获取安装位置

    linux使用yum安装之后保留yum源 linux在使用yum安装之后默认会删除rpm包,那么如何保留呢? vim /etc/yum.conf 将这里的0改成1即可 linux安装的yum源在什么地 ...