【dfs+连通分量】Bzoj1123 POI2008 BLO
Description
Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。
Input
输入n<=100000 m<=500000及m条边
Output
输出n个数,代表如果把第i个点去掉,将有多少对点不能互通。
Solution
求割顶的一系列操作不仅可以用来求割顶,也可以解决很多问题,比如这道题。
dfs是很神奇的,对于节点u能扩展出去的v的子树是互相独立的,反向边也只会往上连。
那么对于u,他的父亲p和能连回去的v形成一个连通块,其余v各成一个连通块。
然后就很好统计了(细节自己想),其实用dfs树来处理大概就是树形dp。
Code
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=1e5+,maxm=1e6+; int pre[maxn],low[maxn],clock;
int head[maxn],e[maxm],nxt[maxm],cnt;
int adde(int u,int v){
e[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
e[++cnt]=u;nxt[cnt]=head[v];head[v]=cnt;
}
ll ans[maxn],t[maxn];
int n,m,size[maxn]; int dfs(int u){
pre[u]=low[u]=++clock;
size[u]=;
for(int i=head[u];i;i=nxt[i]){
int v=e[i];
if(pre[v]) low[u]=min(low[u],pre[v]);
else{
dfs(v);
size[u]+=size[v];
low[u]=min(low[u],low[v]);
if(low[v]>=pre[u]){
ans[u]+=t[u]*size[v];
t[u]+=size[v];
}
}
}
ans[u]+=t[u]*(n-t[u]-);
ans[u]=(ans[u]+n-)*;
} int main(){
scanf("%d%d",&n,&m);
int u,v;
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
adde(u,v);
} for(int i=;i<=n;i++)
if(!pre[i]) dfs(i); for(int i=;i<=n;i++)
printf("%lld\n",ans[i]);
return ;
}
【dfs+连通分量】Bzoj1123 POI2008 BLO的更多相关文章
- BZOJ1123: [POI2008]BLO
		1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 614 Solved: 235[Submit][Status] ... 
- BZOJ1123:[POI2008]BLO(双连通分量)
		Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ... 
- bzoj1123 [POI2008]BLO——求割点子树相乘
		题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 思路倒是有的,不就是个乘法原理吗,可是不会写...代码能力... 写了一堆麻麻烦烦乱七 ... 
- BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)
		#include <iostream> #include <cstring> #include <cstdio> using namespace std; type ... 
- [BZOJ1123]:[POI2008]BLO(塔尖)
		题目传送门 题目描述 Byteotia城市有n个towns.m条双向roads.每条road连接两个不同的towns,没有重复的road.所有towns连通. 输入格式 输入n,m及m条边. 输出格式 ... 
- 【BZOJ-1123】BLO     Tarjan 点双连通分量
		1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 970 Solved: 408[Submit][Status][ ... 
- 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 ... 
随机推荐
- jQuery选择器面试题
			$("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("di ... 
- 使用SecureCRT的SFTP在WINDOWS与LINUX之间传输文件(转载)
			参考文献: http://ice-k.iteye.com/blog/1068275 http://www.cnblogs.com/chen1987lei/archive/2010/11/26/1888 ... 
- 解决ubuntu unity下gvim菜单消失的问题
			#问题描述:在终端下用gvim 指令打开 gvim就不显示菜单.在不启用unity的桌面环境下用终端打开gvim是有菜单的.从程序菜单中打开gvim是显示菜单的.用sudo打开gvim也可以显示菜单, ... 
- [Luogu 4135] 作诗
			Description 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M ... 
- Go 语言集成开发环境 GoLand 更新至 2018.1.3 版本
			GoLand 2018.1.3 已发布,这是一个全新的更新,尽管没有带来明显的针对 Go 语言的特定改进,但还是提供了许多与 UI,JavaScript 和 SQL 支持相关的错误修复和改进. 可通过 ... 
- Python并发编程之线程消息通信机制任务协调(四)
			大家好,并发编程 进入第四篇. 本文目录 前言 Event事件 Condition Queue队列 总结 . 前言 前面我已经向大家介绍了,如何使用创建线程,启动线程.相信大家都会有这样一个想法,线程 ... 
- 第二章之S5PV210在BL1中点亮LED灯
			1,u-boot中第一个入口在./arch/arm/cpu/armv7/start.S 翻到153行:如下图 前面都是进行一些基本设置,不用管. cpu_init_cp15设置协处理器, cpu_in ... 
- Linux下的磁盘分区和逻辑卷
			一.硬盘接口类型 硬盘的接口主要有IDE.SATA.SCSI .SAS和光纤通道等五种类型.其中IDE和SATA接口硬盘多用于家用产品中,也有部分应用于服务器,SATA是一种新生的硬盘接口类型,已经取 ... 
- cw2vec理论及其实现
			导读 本文对AAAI 2018(Association for the Advancement of Artificial Intelligence 2018)高分录用的一篇中文词向量论文(cw2ve ... 
- PAT1079 :Total Sales of Supply Chain
			1079. Total Sales of Supply Chain (25) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ... 
