tarjan BLO
[POI2008]BLO
时间限制: 1 Sec 内存限制: 162 MB
提交: 56 解决: 30
[提交][状态][讨论版]
题目描述
Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。
输入
输入n<=100000 m<=500000及m条边
输出
输出n个数,代表如果把第i个点去掉,将有多少对点不能互通。
样例输入
5 5
1 2
2 3
1 3
3 4
4 5
样例输出
8
8
16
14
8
可以发现,如果一个点是割点,所有被他割断的子节点都会对答案产生贡献(就是这个sz[son]×(n-1-sz[son])),只要最后<<1就好了。
黄学长的做法极其简单,树规,点双连通分啥的都没必要。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
#define N 1000005
#define ll long long
using namespace std;
struct road{int v,next;}lu[N*10];
int n,m,e,adj[N],cnt,dfn[N],low[N];
ll ans[N],sz[N];
inline void add(int u,int v){lu[++e]=(road){v,adj[u]};adj[u]=e;}
inline void gmin(int &x,int y){if(y<x)x=y;}
void tarjan(int x)
{ll sum=0;low[x]=dfn[x]=++cnt;sz[x]=1;for(int i=adj[x];i;i=lu[i].next){int to=lu[i].v;if(!dfn[to]){tarjan(to);sz[x]+=sz[to];gmin(low[x],low[to]);if(dfn[x]<=low[to]){ans[x]+=sum*sz[to];sum+=sz[to];}}else gmin(low[x],dfn[to]);}ans[x]+=sum*(n-sum-1)*1ll;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1,x,y;i<=m;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);}tarjan(1);for(int i=1;i<=n;i++)printf("%lld\n",(ans[i]+(n-1)*1ll)<<1);
}
tarjan BLO相关推荐
- 【BZOJ1123】 [POI2008]BLO (tarjan)
tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好. 1 const maxn=100419; 2 maxm=1000419; 3 type ...
- bzoj 1123: [POI2008]BLO (tarjan求点双+树形DP)
题目描述 传送门 题目大意:给出一个无向连通图,求删去一个点后有多少点对不连通. 题解 tarjan求点双,然后对于点双新建节点,并连接所有点双中的节点,形成一棵树后进行树形DP即可. 代码 #inc ...
- [BZOJ1123][POI2008]BLO(tarjan求点双+树形dp)
题目描述 传送门 题目大意:给出一个n个点m条边的无向连通图,问去掉每一个点之后存在多少点对不连通. 题解 tarjan求点双联通分量,对于每一个点双建立一个虚拟的节点,然后将这个点双的所有节点都连接 ...
- BZOJ 1123 POI2008 BLO Tarjan+树形DP
题目大意:给定一张无向图,求每个点被封锁之后有多少个有序点对(x,y)(x!=y,1<=x,y<=n)满足x无法到达y 还是看原题面爽... Tarjan求点双,然后TreeDP即可 时间 ...
- 2018.11.09 codeforces487E. Tourists(tarjan+树链剖分)
传送门 先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护. 注意对于边双连通分量需要维护动态最小值,可以用multisetmultisetmultiset. 代码: #include&l ...
- tarjan算法与无向图的连通性(割点,桥,双连通分量,缩点)
基本概念 给定无向连通图G = (V, E) 割点: 对于x∈V,从图中删去节点x以及所有与x关联的边之后,G分裂为两个或两个以上不相连的子图,则称x为割点 割边(桥) 若对于e∈E,从图中删去边e之 ...
- 1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MB 链接:https://www.lydsy.com/JudgeOnline/pro ...
- bzoj 1123: [POI2008]BLO(Trajan求割点)
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1468 Solved: 678 [Submit][Statu ...
- 海亮DAY8 关于Tarjan算法用于割点割边相关感受
Tarjan 简介 Tarjan算法在求割点,割边,连通分量方面及其高效,在军事,交通,设计等方面有重要作用. 由于Tarjan算法思想并不难懂,在此不放上Tarjan算法的具体介绍. [Usaco2 ...
最新文章
- sqlserver在linux数据备份,SQLServer数据库之sqlserver for linux自动备份数据库脚本
- DNS通道检测 国内学术界研究情况——研究方法:基于特征或者流量,使用机器学习决策树分类算法居多...
- cmd上写的java简单代码_用cmd编辑一个超级简单的小游戏,求代码
- 典型的简单权限分配系统方法介绍
- fast路由器服务器未响应,win7系统下fast路由器进不了设置界面如何解决
- PHP笔记-订货单例子
- 04-windows下Orcale的启动
- Notepad ++添加到每一行
- linux xargs命令_如何在Linux中使用xargs命令?
- 常见不等式考察(一)——Jensen不等式
- python实现逻辑回归算法
- 如何更改itunes备份位置_Win10系统怎样设置itunes备份位置
- JPA注解@Enumerated映射枚举字段
- 2017报计算机热不热,【2017年10月份热吗】2017年10月份热不热_亲亲宝贝网
- java.lang.Byte cannot be cast to java.lang.Integer,sql 到 java 类型转换遇到的问题
- 【数学】微分(Differential)的定义,微分与导数的区别
- sublime指定python版本
- PB实现国密SM2/SM3/SM4算法(DLL方式)
- Chrome安装插件Save All Resources
- 基于Springboot社区居民健康档案管理系统 毕业设计-附源码220940