P3469 BLO-Blockade (缩点)
又可以水紫题了,好开心
前置芝士
无向图割点,然后脑子。。。
不会的童鞋,出门右转,百度百科。。。QAQ
首先,对于这道题,我们要求的是,割去每个点及他所连的边后,无向图中,有多少有序点对(\(x\),\(y\))满足
\(x\),\(y\)互不连通
我们思考一下,这道题既然跟点有关,那么我们可以想到,在无向图中,我们可以把所有的点分为两种,割点,
和非割点。
我们大力讨论一下。。。。
对于非割点
把他去掉之后,就会发生这样的事情,
样例原始图是这样
5不是割点,去掉她以及他连的边后
就会成这样
他就会与剩下\(n-1\)个点,不相连,那么他的\(ans\)就是\(2\times (n-1)\)
那么对于割点呢?????
其实不难,请同学自证
假如 \(j\) 是割点把 \(j\) 割掉后,图就会分成好几个联通快。那么求出每个连通块的大小,再分别乘起来就行。
我们把它放到搜索树上考虑,这几种连通块就会有以下几种情况
- 割点 \(j\) 单独成一个块。
- \(j\) 的每个子树都是一个连通块
- 除了 \(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 (缩点)的更多相关文章
- 【洛谷P3469】BLO
题目大意:给定 N 个点,M 条边的联通无向图,求出对于每个点来说,将与这个点相连的所有边都去掉后,会少多少个联通的点对 (x,y). 题解:连通性问题从 DFS 树的角度进行考虑.对于 DFS 树当 ...
- BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)
#include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...
- tarjan算法与无向图的连通性(割点,桥,双连通分量,缩点)
基本概念 给定无向连通图G = (V, E)割点:对于x∈V,从图中删去节点x以及所有与x关联的边之后,G分裂为两个或两个以上不相连的子图,则称x为割点割边(桥)若对于e∈E,从图中删去边e之后,G分 ...
- 【bzoj1123】BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2222 Solved: 1090[Submit][Status ...
- P3469 [POI2008]BLO-Blockade(Tarjan 割点)
P3469 [POI2008]BLO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每 ...
- POJ 2186 Popular Cows(Targin缩点)
传送门 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31808 Accepted: 1292 ...
- poj2186--tarjan+缩点
题目大意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...
- POJ3160 Father Christmas flymouse[强连通分量 缩点 DP]
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3241 Accep ...
- UVA11324 The Largest Clique[强连通分量 缩点 DP]
UVA - 11324 The Largest Clique 题意:求一个节点数最大的节点集,使任意两个节点至少从一个可以到另一个 同一个SCC要选一定全选 求SCC 缩点建一个新图得到一个DAG,直 ...
随机推荐
- Hihocoder 1116 计算
这题最开始的时候看到线段树吧,没找到好的做法 想了下既然是乘积和 (-) (--) (---) 在脑子里就是这种线条位于各个位置,然后各种长度代表连续的乘积个数 然后把所有情况累加起来,但是并不好算 ...
- Web测试和前端技术
Html Form表单 用户需要输入内容的地方一般有一个表单元素 method:GET/POST action:要打开/提交的目文件 Table表格 检查表格数据和数据库的一致性 表格的布局检测:填满 ...
- JVM内存区域与垃圾回收
1.JAVA内存区域与内存溢出 1.1.概述 Java中JVM提供了内存管理机制,Java虚拟机在执行Java程序的过程中会把内分分为不同的数据区,如图: 1.2.程序计数器 程序计数器是当前线程所执 ...
- 跟着兄弟连系统学习Linux-【day02】
day02-20200528 p6.vmvare安装与使用 官网下载安装包,个人学习的时候要求不高,所以不用安装最新版本,用不到那么多的功能,保证稳定版本就好了,然后傻瓜式安装.注意安 ...
- Linux 用户与权限
这些天一直在看Linux的命令但是却没有写文章,因为感觉没有必要,哪些简单的命令,vi cat cd 啥的,是个做开发的就知道,所以就没写; 用户管理 第一个我们知道的用户就是Root 没错哦,这就是 ...
- 2020 最新python入门知识
1. 基础语法 1.1 注释 在编写代码的时候,有些代码不需要执行或增加代码说明,那么就需要用到注释了. 被注释的文本或代码是不会被执行的. 注释可以使用如下三种方式: # 号 # 第一个注释,本行代 ...
- opencv-python函数
opencv-python读取.展示和存储图像 1.imshow函数 imshow函数作用是在窗口中显示图像,窗口自动适合于图像大小,我们也可以通过imutils模块调整显示图像的窗口的大小.函数官方 ...
- 微信小程序 | 模仿百思不得其姐
微信小程序 仿百思不得姐 设备 微信开发者工具 v1.02.1901230 扩展 修复了视频点击播放不流畅的问题 修复了视频的暂停够无法播放问题 优化了部分页面 接口 首页 http://api.bu ...
- 云计算openstack共享组件——消息队列rabbitmq(3)
一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传 ...
- 在浏览器输入 URL 回车之后发生了什么(超详细版)
前言 这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了. 这篇笔记是我这两天看了数十篇文章总结出来的,所以相对 ...