题目链接

题意:一张无向图,把第$i$个点关联的所有边去掉,求无向图中有多少个点对不连通。

题解:

如果割的不是割点,那么总答案是$2\times (n-1)$.

如果是割点,要分别考虑每个子树的贡献.

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int N = 1e5 + , M = 5e5 + ;
int head[N], ver[M * ], Next[M * ];
int dfn[N], low[N], Size[N];
ll ans[N];
bool cut[N];
int n, m, tot, num; ///时间戳号 void add(int u, int v)
{
ver[++tot] = v, Next[tot] = head[u], head[u] = tot;
}
void tarjan(int u)
{
dfn[u] = low[u] = ++num; Size[u] = ;
int flag = , sum = ;
for(int i = head[u]; i; i = Next[i])
{
int v = ver[i];
if(!dfn[v])
{
tarjan(v);
Size[u] += Size[v];
low[u] = min(low[u], low[v]);
if(low[v] >= dfn[u])
{
flag++;
ans[u] += (ll)Size[v] * (n - Size[v]);
sum += Size[v];
if(u != || flag > ) cut[u] = true;
}
}
else low[u] = min(low[u], dfn[v]);
}
if(cut[u]) ans[u] += (ll)(n - sum - ) * (sum + ) + (n - );
else ans[u] = * (n - );
}
int main()
{
scanf("%d %d", &n, &m); tot = ;
for(int i = ; i <= m; i++)
{
int u, v; scanf("%d %d", &u, &v);
if(u == v) continue;
add(u, v), add(v, u);
}
tarjan();
for(int i = ; i <= n; i++) printf("%lld\n", ans[i]);
return ;
}

Code

BZOJ 1123 tarjan的更多相关文章

  1. bzoj 1123 tarjan求割点

    #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak ...

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

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

  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 Tarjan求割点

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

  5. BZOJ 1123: [POI2008]BLO

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

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

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

  7. BZOJ 1123 BLO

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

  8. BZOJ 1123:城市道路

    Sol 就是求割点,把贡献算一下就好...直接tarjan # include <bits/stdc++.h> # define RG register # define IL inlin ...

  9. BZOJ 1123 && Luogu P3469 [POI2008]BLO-Blockade 割点+乘法原理

    想了半天式子...最后在邓大师的帮助下想出此题....QWQ我还是太菜了 对于一个非割点,ans+=2*(n-1); 对于一个割点,ans+= #include<cstdio> #incl ...

随机推荐

  1. sql server 全部错误号详释

    0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 拒绝访问. 6 句柄无效. 7 存储控制块被损坏. 8 存储空间不足,无法处理此 ...

  2. python+selenium(环境的安装)

    前言:网上的资料层次不齐,且资料也不全,容易误导新手,所以笔者愿意把你的知识免费分享给大家,笔者用的版本为:python3 此时可能新手就会问了,为什么不用python2呢,因为道理很简单,人要往前走 ...

  3. Navicat工具备份还原mysql数据库详细图解

    Navicat是个很不错的MYSQL数据库管理工具,我们常用的还web形式的phpmyadmin和font这三种了,都是非常不错的mysql管理工具.因为Navicat工具兼容性比较好,操作也比较简单 ...

  4. PHP14 动态图像处理

    学习要点 如何使用PHP中的GD库 设计验证码类 PHP图片处理 设计图像图处理类 如何使用PHP中的GD库 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站 ...

  5. 【传智播客】Libevent学习笔记(四):事件event

    目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. ...

  6. 清除SQL Server 2008记住的数据库地址、登录名和密码

    在服务器上登录过数据库信息,并且选择了记住了密码,由于服务器数据库很多人在使用,有必要删除信息 定位到fileC:\Users\%username%\AppData\Roaming\Microsoft ...

  7. Educational Codeforces Round 59 (Rated for Div. 2) (前四题)

    A. Digits Sequence Dividing(英文速读) 练习英语速读的题,我还上来昏迷一次....只要长度大于2那么一定可以等于2那么前面大于后面就行其他no 大于2的时候分成前面1个剩下 ...

  8. [LUOGU] P4290 [BZOJ] 1055 [HAOI2008]玩具取名

    题目描述 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用"WING"中任意两个字母代 ...

  9. MySQL连接使用及分类

    SQL连接 SQL 连接(JOIN)子句用于将数据库中两个或者两个以上表中的记录组合起来.连接通过共有值将不同表中的字段组合在一起. 考虑下面两个表,(a)CUSTOMERS 表:+----+---- ...

  10. python_面向对象笔记

    继承 什么是继承? 继承是一种新建类的方式,新建的类称为子类或派生类父类又称为基类.超类 子类可以“遗传”父类的属性,从而可以减少代码冗余 如何寻找继承关系?先抽象,再继承,继承描述的就是一种父子关系 ...