BZOJ 1123: [POI2008]BLO
1123: [POI2008]BLO
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1030 Solved: 440
[Submit][Status][Discuss]
Description
Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。
Input
输入n<=100000 m<=500000及m条边
Output
输出n个数,代表如果把第i个点去掉,将有多少对点不能互通。
Sample Input
1 2
2 3
1 3
3 4
4 5
Sample Output
8
16
14
8
HINT
Source
分析
如果一个点不是割点,那么删去后不会对其他点之间的连通性造成影响;如果是一个割点,影响只和其连接的几个块的大小有关。因此Tarjan求割点的同时注意维护子树大小即可。
代码
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> using namespace std; #define N 5000000
#define LL long long int n, m; LL ans[N]; int hd[N], to[N], nt[N], tot; int dfn[N], low[N], tim; int tarjan(int u, int f)
{
dfn[u] = low[u] = ++tim; ans[u] = (n - ) << ; int cnt = , siz; LL sum = , tmp = ; for (int i = hd[u]; ~i; i = nt[i])if (f != to[i])
{
if (!dfn[to[i]])
{
siz = tarjan(to[i], u);
low[u] = min(low[u], low[to[i]]);
if (low[to[i]] >= dfn[u])
ans[u] += 2LL * siz * sum, sum += siz;
else
tmp += siz;
}
else
low[u] = min(low[u], dfn[to[i]]);
} ans[u] += 2LL * (n - (sum + )) * sum; return sum + tmp + ;
} signed main(void)
{
scanf("%d%d", &n, &m); memset(hd, -, sizeof(hd)), tot = ; for (int i = ; i <= m; ++i)
{
int x, y; scanf("%d%d", &x, &y); nt[tot] = hd[x]; to[tot] = y; hd[x] = tot++;
nt[tot] = hd[y]; to[tot] = x; hd[y] = tot++;
} memset(dfn, , sizeof(dfn)); tim = ; tarjan(, -); for (int i = ; i <= n; ++i)
printf("%lld\n", ans[i]);
}
BZOJ_1123.cpp
#include <cstdio> template <class T>
inline T min(const T &a, const T &b)
{
return a < b ? a : b;
} typedef long long lnt; const int mxn = ;
const int mxm = ; int n, m; int hd[mxn];
int to[mxm];
int nt[mxm]; int dfn[mxn];
int low[mxn]; lnt ans[mxn]; lnt tarjan(int u, int f)
{
static int tim = ; ans[u] = (n - ) << ;
dfn[u] = low[u] = ++tim; lnt siz, sum = , tmp = ; for (int i = hd[u], v; i; i = nt[i])
if ((v = to[i]) != f)
{
if (!dfn[v])
{
siz = tarjan(v, u); low[u] = min(low[u], low[v]); if (low[v] >= dfn[u])
ans[u] += 2LL * sum * siz, sum += siz;
else
tmp += siz;
}
else
low[u] = min(low[u], dfn[v]);
} ans[u] += 2LL * (n - sum - ) * sum; return sum + tmp + ;
} signed main(void)
{
scanf("%d%d", &n, &m); for (int i = ; i < m; ++i)
{
static int x, y, tot; scanf("%d%d", &x, &y); nt[++tot] = hd[x], to[tot] = y, hd[x] = tot;
nt[++tot] = hd[y], to[tot] = x, hd[y] = tot;
} tarjan(, ); for (int i = ; i <= n; ++i)
printf("%lld\n", ans[i]);
}
@Author: YouSiki
BZOJ 1123: [POI2008]BLO的更多相关文章
- BZOJ 1123: [POI2008]BLO( tarjan )
tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------- ...
- bzoj 1123 [POI2008]BLO Tarjan求割点
[POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1540 Solved: 711[Submit][Status][Discu ...
- BZOJ 1123 [POI2008]BLO(Tarjan算法)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1123 [题目大意] Byteotia城市有n个towns,m条双向roads. 每条r ...
- bzoj 1123 [POI2008]BLO——点双连通分量
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 点双连通分量缩点,然后各种各样. 结果不会写了.比如新连边.记录一个点是割点缩成的点还 ...
- BZOJ 1123: [POI2008]BLO 求割点_乘法原理_计数
Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...
- BZOJ1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 614 Solved: 235[Submit][Status] ...
- Bzoj 1131[POI2008]STA-Station (树形DP)
Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...
- [POI2008]BLO(Tarjan)
[POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...
- BZOJ 1123 BLO
tarjan求割点计算答案.注意不是每一棵子树都算答案.开个变量记一下. #include<iostream> #include<cstdio> #include<cst ...
随机推荐
- Maven私服Nexus3.x环境构建操作记录
Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...
- Pycharm: keyboard reference
Source: Official set ♥ Editing Ctrl + Space Basic code completion (the name of any class, method or ...
- mongodb分布式查询
分布式查询:mongodb的分布式模型分为replica set和sharded cluster. sharded集群中将read根据sharding key(分片键)转发到指定的shard节点,re ...
- IE8和W3C标准下IFRAME刷新和URL的区别
一个页面中包含了一个iframe,我们要刷新这个iframe的情况 url在IE8和W3C以及IE11的区别如下: URL使用相对路径,绝对路径比如http://localhost:5568/替换成I ...
- 利用Spring MVC搭建REST Service
之前写过一篇 利用JAX-RS快速开发RESTful 服务 今天来看下spring-mvc框架如何实现类似的功能: 一.pom.xml <?xml version="1.0" ...
- 航空货运:运价类别Rate Class
1.普通货物运价(1)基础运价(代号N -注:Normal的首字母)民航总局统一规定各航段货物基础运价为45公斤以下普通货物运价.(2)重量分界点运价(代号Q -注:Quantity的首字母)国内航 ...
- Hibernate hbm2ddl.auto DDL语句 控制台输出的配置
在开发中我们需要知道hbm2ddl.auto生成的SQL语句,来判断代码的正确性,现在记录配置的过程. Hibernate的DDL语句在控制台的输出配置: 一.在lib中确保只有下面的三个相关包:1) ...
- Python2.5-原理之模块
此部分来自于<Python学习手册>第五部分 一.模块(21章) 模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用..模块往往对应于python程序文件.每个文件就是一个模 ...
- href的那些事
很多网站中都会使用<a>标签和 href属性来做链接,尤其在分页显示中用得最普遍.然而很多人对href的使用却并不十分了解. 1.href="#" 这个在网页中上滚回顶 ...
- 更便捷的Android多渠道打包方式
本文先回顾了以往流行的多渠道打包方式,随后引入的mcxiaoke的packer-ng-plugin项目,介绍该项目在实际应用(配合友盟统计)中如何解决更方便的Android多渠道打包问题 多渠道打包方 ...