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

5 5
1 2
2 3
1 3
3 4
4 5

Sample Output

8
8
16
14
8

HINT

 

Source

 

[Submit][Status][Discuss]

分析

如果一个点不是割点,那么删去后不会对其他点之间的连通性造成影响;如果是一个割点,影响只和其连接的几个块的大小有关。因此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的更多相关文章

  1. BZOJ 1123: [POI2008]BLO( tarjan )

    tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------- ...

  2. bzoj 1123 [POI2008]BLO Tarjan求割点

    [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1540  Solved: 711[Submit][Status][Discu ...

  3. BZOJ 1123 [POI2008]BLO(Tarjan算法)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1123 [题目大意] Byteotia城市有n个towns,m条双向roads. 每条r ...

  4. bzoj 1123 [POI2008]BLO——点双连通分量

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 点双连通分量缩点,然后各种各样. 结果不会写了.比如新连边.记录一个点是割点缩成的点还 ...

  5. BZOJ 1123: [POI2008]BLO 求割点_乘法原理_计数

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...

  6. BZOJ1123: [POI2008]BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 614  Solved: 235[Submit][Status] ...

  7. Bzoj 1131[POI2008]STA-Station (树形DP)

    Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...

  8. [POI2008]BLO(Tarjan)

    [POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...

  9. BZOJ 1123 BLO

    tarjan求割点计算答案.注意不是每一棵子树都算答案.开个变量记一下. #include<iostream> #include<cstdio> #include<cst ...

随机推荐

  1. css相关问题

    display:none和visibility:hidden的区别? 前几天遇到的这个问题,表格布局:::::display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢 ...

  2. fabric批量操作远程操作主机的练习

    fabric是python的一个基于命令行的自动化部署框架,用docker开了两个容器来学习fabric. #!/usr/bin/env python #-*- coding=utf-8 -*- fr ...

  3. centos安装docker

    一.升级内核 [root@iZ2893wjzgyZ ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@iZ289 ...

  4. fMRI数据分析处理原理及方法

    来源: 整理文件的时候翻到的,来源已经找不到了囧感觉写得还是不错,贴在这里保存. 近年来,血氧水平依赖性磁共振脑功能成像(Blood oxygenation level-dependent funct ...

  5. 039医疗项目-模块四:采购单模块—采购单的创建-----------Dao层,service层,Acion层

    我们根据数据库里面的表格:生成对应的Mapper接口文件和...Mapperxml文件: YYCGD:采购单模板表. YYCGD2014:采购单动态生成表,由存储过程生成. YYCGDMX:采购单明细 ...

  6. ASP.NET MVC的Web Api的实练

    学习ASP.NET MVC一年多来,现在该学学Web Api了.API与ASP.NET MVC的Controller差不多.前者只是返回数据序列化和发送给客户端: 后者返回View或Render Vi ...

  7. Linux 信号详解六(可靠信号与不可靠信号)

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...

  8. Webwork 学习之路【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  9. sql基本命令

    --------------------------------------------------------SQL基本命令开始----------------------------------- ...

  10. DOM 概况

    DOM(文档对象模型)是针对 HTML 和 XML 文档的一个API(应用程序编程接口).DOM 描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 层次节点 DOM可以将任何 H ...