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 ...
随机推荐
- css实现省略号
样式: {width: 160px; overflow: hidden; text-overflow:ellipsis; white-space: nowrap;} 说明: white-space: ...
- C# 根据正则表达式来判断输入的是不是数字
最近在做输入判断的时候出现了一个需要判断输入合法性的问题,就是判断输入的是不是数字,判断方法是根据正则表达式来判断,具体方法如下: private bool IsRightNum(string str ...
- c#描述异常处理语句try、catch、finally执行时的相互关系
try里面是执行代码,其中的代码"可能"产生异常. catch是对产生异常后的处理代码,可以抛出异常,也可以显示异常,也可以弹出某中提示,总之catch里是任何代码都行,如果你知道 ...
- Tomcat 内存溢出对应解决方式
1.Tomcat内存溢出的原因 生产环境中Tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三 ...
- lecture11-hopfiled网络与玻尔兹曼机
Hinton课程第11课 这部分的课程算是个知识背景,讲述RBM的来源吧,毕竟是按照hopfield--BM-RBM的路线过来的. 因为水平有限,都是直译,如果纠结某句话,肯定看不懂,所以这些课程只需 ...
- 熟悉css/css3颜色属性
颜色属性无处不在.字体要用颜色,背景可以有颜色,粒子特效更是离不开颜色.本文参考了一些资料简单总结下以备日后查阅. css中颜色的定义方式: 十六进制色 RGB & RGBA HSL & ...
- C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- async 更优雅异步体验
上一篇<让 Generator 自启动>介绍了通过起动器让 Generator 跑起来,而本篇采用 async 实现更优雅的异步编程. 从例子开始 借用上一篇例子中的例子说起. funct ...
- 支持向量机通俗导论(理解SVM的三层境界)
原文链接:http://blog.csdn.net/v_july_v/article/details/7624837 作者:July.pluskid :致谢:白石.JerryLead 出处:结构之法算 ...
- Ubuntu disk error
I have heard that ext file system is easy to crash. Today i forced to shutdown Ubuntu. As a result,i ...