BZOJ 1123: [POI2008]BLO 求割点_乘法原理_计数
Description
Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。
Input
输入n<=100000 m<=500000及m条边
Output
输出n个数,代表如果把第i个点去掉,将有多少对点不能互通。
题解:
一段巧妙的代码:
if(low[to[v]]>=pre[u]) {
answer[u]+=(ll)t*siz[to[v]];
t+=siz[to[v]];
}
考虑要实现每两个联通块之间分别乘一次,并加和.
用这种方式可以实现每两个联通块之间只乘一次.
Code:
#include<bits/stdc++.h>
#define setIO(s)freopen(s".in","r",stdin)
#define maxn 1100000
using namespace std;
int n;
#define ll long long
long long answer[maxn];
int cnt=0,scc=0;
int nex[maxn],to[maxn],head[maxn];
void add(int u,int v){ nex[++cnt]=head[u],head[u]=cnt,to[cnt]=v;}
int low[maxn],pre[maxn];
ll siz[maxn];
void dfs(int u,int fa){
low[u]=pre[u]=++scc;
siz[u]=1;
ll t=0;
for(int v=head[u];v;v=nex[v]){
if(to[v]==fa) continue;
if(pre[to[v]]) low[u]=min(low[u],pre[to[v]]);
else {
dfs(to[v],u);
siz[u]+=siz[to[v]];
if(low[to[v]]>=pre[u]) {
answer[u]+=(ll)t*siz[to[v]];
t+=siz[to[v]];
}
low[u]=min(low[u],low[to[v]]);
}
}
answer[u]+=(ll)((ll)n-t-1)*t;
}
int main()
{
//setIO("input");
int m;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v),add(v,u);
}
dfs(1,0);
for(int i=1;i<=n;i++) printf("%lld\n",(ll)(answer[i]+(ll)n-1)*2);
return 0;
}
BZOJ 1123: [POI2008]BLO 求割点_乘法原理_计数的更多相关文章
- BZOJ 1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1030 Solved: 440[Submit][Status] ...
- 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 ...
- bzoj1123 [POI2008]BLO——求割点子树相乘
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 思路倒是有的,不就是个乘法原理吗,可是不会写...代码能力... 写了一堆麻麻烦烦乱七 ...
- 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 点双连通分量缩点,然后各种各样. 结果不会写了.比如新连边.记录一个点是割点缩成的点还 ...
- BZOJ1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 614 Solved: 235[Submit][Status] ...
- BZOJ 1123 BLO
tarjan求割点计算答案.注意不是每一棵子树都算答案.开个变量记一下. #include<iostream> #include<cstdio> #include<cst ...
- [POI2008]BLO(Tarjan)
[POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...
随机推荐
- 学习EXTJS6(8)基本功能-表单的基础表字段Ext.form.field.Basic
Ext.form.field.Basic是表单字段的基类. Ext.form.field.Text Ext.form.field.TextArea Ext.form.field.Number Ext. ...
- Mahmoud and a Dictionary
Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input sta ...
- 用saltapi远程操作tomcat启停时,输出日志乱码再解决
以前解决过一次,是定义LC_ALL为指定编码.但这种思路不完全,因为机器各各不同,系统编码本身不一致(标准化之路漫长啊) 故而在其它一些系统的部署时,用上一次的方案,反而会有错误产生. 于是,按洪军找 ...
- 在AIX下面查询上一次命令
在AIX下面查询上一次命令 输入 r 或者 set -o vi 用vi的操作找上一次命令: 学习了: http://blog.itpub.net/66634/viewspace-1000843/ ht ...
- hdu5326 Work
题目链接:点击打开链接 题目大意:有n个人.各自管理不同的人,问有多少人管理k个人. 思路:先记录每一个人的直接上级.然后模拟路径压缩的过程进行计数求和. #include<stdio.h> ...
- 黑马day07 登录注冊案例(一)
简单介绍:依据三层架构的思想设计本案例. 1.搭建好开发环境 准备好须要的包和模拟数据库配置文件users.xml -->cn.itheima.dao -->cn.itheima.serv ...
- IOS 动态库问答
- udev的使用-minicom没有权限打开串口,更改 ttyUSB0 的权限
udev的使用-minicom没有权限打开串口,更改 ttyUSB0 的权限 使用minicom打开串口会提示没有权限,必需要用 sudo,怎样更改串口设备的权限能够让普通用户读写呢? 事实上仅仅要更 ...
- JFinal Starting scanner at interval of 5 seconds.报错
Starting JFinal 2.0 Starting scanner at interval of 5 seconds. Starting web server on port: 80 Excep ...
- [BZOJ 2100] Apple Delivery
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2100 [算法] Answer = min{ dist(PB,PA1) + dist( ...