又可以水紫题了,好开心

前置芝士

无向图割点,然后脑子。。。

不会的童鞋,出门右转,百度百科。。。QAQ

首先,对于这道题,我们要求的是,割去每个点及他所连的边后,无向图中,有多少有序点对(\(x\),\(y\))满足

\(x\),\(y\)互不连通

我们思考一下,这道题既然跟点有关,那么我们可以想到,在无向图中,我们可以把所有的点分为两种,割点,

和非割点。

我们大力讨论一下。。。。

对于非割点

把他去掉之后,就会发生这样的事情,

样例原始图是这样

5不是割点,去掉她以及他连的边后

就会成这样

他就会与剩下\(n-1\)个点,不相连,那么他的\(ans\)就是\(2\times (n-1)\)

那么对于割点呢?????

其实不难,请同学自证

假如 \(j\) 是割点把 \(j\) 割掉后,图就会分成好几个联通快。那么求出每个连通块的大小,再分别乘起来就行。

我们把它放到搜索树上考虑,这几种连通块就会有以下几种情况

  1. 割点 \(j\) 单独成一个块。
  2. \(j\) 的每个子树都是一个连通块
  3. 除了 \(j\) 和他子树中的点,其他点构成一个连通块

就像这样

原图

5是割点

割去5后,变成这样

他的搜索树长这样

他的子树 6 ,2 , 3 各成一个联通快

它上面的 1 4 节点成一个连通块

他自己又成一个联通块

因此割点的答案就是

\(\displaystyle\sum_{k = 1}^{k}size_i\times (n-size_i)\) + (\(n\)-\(sum + 1\)) * (\(sum + 1\)) + (\(n-1\));

\(sum\) 是他子树的大小,\(n-sum+1\) 为剩下的大联通块的大小,\(sum+1\)就是他自己和他子树的大小

上代

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 1e5+10;
int n,m,x,y,tot,num,root;
int head[N],dfn[N],low[N],size[N];
long long ans[N];
bool cut[N];
struct node{int to ,net;} e[500100*2];
inline int read()
{
int s = 0 , w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9'){s =s * 10+ch - '0'; ch = getchar();}
return s * w;
}
void add(int x,int y)
{
e[++tot].to = y;
e[tot].net = head[x];
head[x] = tot;
}
void tarjain(int x)
{
dfn[x] = low[x] = ++num; size[x] = 1;
int flag = 0,sum = 0;//sum是子树和
for(int i = head[x]; i; i = e[i].net)
{
int to = e[i].to;
if(!dfn[to])
{
tarjain(to);
size[x] += size[to];//统计一下他的size
low[x] = min(low[x],low[to]);
if(low[to] >= dfn[x])
{
flag++;
ans[x] += (long long) size[to] * (n - size[to]);//统计一下他子树的贡献
sum += size[to];
if(x != root || flag > 1) cut[x] = true;
}
}
else low[x] = min(low[x] , dfn[to]);
}
if(cut[x] = true) ans[x] += (long long) (n - sum - 1) * (sum + 1) + (n-1);//最后加上他的贡献和其他点的贡献
else ans[x] = 2 * (n-1);//非割点的情况
}
int main()
{
n = read(); m = read();
for(int i = 1; i <= m; i++)
{
x = read(); y = read();
add(x,y); add(y,x);
}
root = 1; tarjain(1);
for(int i = 1; i <= n; i++) printf("%lld\n" , ans[i]);
return 0;
}

P3469 BLO-Blockade (缩点)的更多相关文章

  1. 【洛谷P3469】BLO

    题目大意:给定 N 个点,M 条边的联通无向图,求出对于每个点来说,将与这个点相连的所有边都去掉后,会少多少个联通的点对 (x,y). 题解:连通性问题从 DFS 树的角度进行考虑.对于 DFS 树当 ...

  2. BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...

  3. tarjan算法与无向图的连通性(割点,桥,双连通分量,缩点)

    基本概念 给定无向连通图G = (V, E)割点:对于x∈V,从图中删去节点x以及所有与x关联的边之后,G分裂为两个或两个以上不相连的子图,则称x为割点割边(桥)若对于e∈E,从图中删去边e之后,G分 ...

  4. 【bzoj1123】BLO

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

  5. P3469 [POI2008]BLO-Blockade(Tarjan 割点)

    P3469 [POI2008]BLO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每 ...

  6. POJ 2186 Popular Cows(Targin缩点)

    传送门 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31808   Accepted: 1292 ...

  7. poj2186--tarjan+缩点

    题目大意:       每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...

  8. POJ3160 Father Christmas flymouse[强连通分量 缩点 DP]

    Father Christmas flymouse Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 3241   Accep ...

  9. UVA11324 The Largest Clique[强连通分量 缩点 DP]

    UVA - 11324 The Largest Clique 题意:求一个节点数最大的节点集,使任意两个节点至少从一个可以到另一个 同一个SCC要选一定全选 求SCC 缩点建一个新图得到一个DAG,直 ...

随机推荐

  1. Mc小冰总结的Android开发工程师面试题以及答案,android程序员必备,详解

    1.请谈一下Android系统的架构. 答:Android系统采用了分层架构,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层. 2.谈谈android大众常用的五种布局. ...

  2. 【小白学PyTorch】5 torchvision预训练模型与数据集全览

    文章来自:微信公众号[机器学习炼丹术].一个ai专业研究生的个人学习分享公众号 文章目录: 目录 torchvision 1 torchvision.datssets 2 torchvision.mo ...

  3. iview table render 进阶(一)

    Qestion: 如何给表格添加hover 事件? step1:  添加 domProps 选项参数 step2:  废话不多说,直接看demo code render: (h, params) =& ...

  4. asp image

    @Url.Content("~/Content/images/myimage.png") <img src="~/Content/images/myimage.pn ...

  5. Maxscript中渲染中文版Vray完成贴图(VrayCompleteMap)的方法

    Objbakeproperties = $.INodeBakeProperties; --选定对象的烘培节点 Prjbakeproperties = $.INodeBakeProjProperties ...

  6. WinMTR 网络测试工具-九五小庞

    WinMTR(建议优先使用) 百度下载工具 链接:https://pan.baidu.com/s/19ArKSTA2amsa4p6vHegDIQ 提取码:cy4y WinMTR是mtr工具在Windo ...

  7. oracle无法通过ip地址连接

    问题描述:使用plsql可以连接本地oracle实例,但telnet 192.168.130.71 (内网ip)不通. 其实在11g安装完成后,默认网络配置 listener.ora中 host = ...

  8. SQL分词器1.10版

    处理SQL及分词效果: select * from ( select rownum as rn,tb1.stuid,tb1.summary from ( select stuid,sum(score) ...

  9. Ubuntu 安装配置 WordPress5.4.2

    一.安装 Apache 并配置 WordPress sudo apt-get install apache2 -y //  安装 apache2 sudo apt-get install php -y ...

  10. JS -- 基础语法1

    一.document.write() 输出内容 document.write() 可用于直接在网页中输出内容. 方式1:输出内容用""括起,直接输出""号内的内 ...