【洛谷P3469】BLO
题目大意:给定 N 个点,M 条边的联通无向图,求出对于每个点来说,将与这个点相连的所有边都去掉后,会少多少个联通的点对 (x,y)。
题解:连通性问题从 DFS 树的角度进行考虑。对于 DFS 树当前的节点来说,若其子节点的 low[] 大于等于子树根节点的时间戳,则将该节点的边去掉后,以该子树的孩子节点为根的子树会和其余部分不连通,会对答案产生一个贡献。诸如此类分析即可得到总共的答案。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxv=1e5+10;
const int maxe=5e5+10;
inline int read(){
int x=0,f=1;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
return f*x;
}
struct node{
int nxt,to;
}e[maxe<<1];
int tot=1,head[maxv];
inline void add_edge(int from,int to){
e[++tot]=node{head[from],to},head[from]=tot;
}
int n,m;
int dfs_clk,root,low[maxv],dfn[maxv],size[maxv];
long long ans[maxv];
bool cut[maxv];
void read_and_parse(){
n=read(),m=read();
for(int i=1,x,y;i<=m;i++){
x=read(),y=read();
if(x==y)continue;
add_edge(x,y),add_edge(y,x);
}
}
void dfs(int u,int fe){
int flag=0,sum=0;
dfn[u]=low[u]=++dfs_clk,size[u]=1;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(!dfn[v]){
dfs(v,i);
size[u]+=size[v];
low[u]=min(low[v],low[u]);
if(low[v]>=dfn[u]){
++flag;
sum+=size[v];
ans[u]+=(long long)size[v]*(n-size[v]);
if(u!=root||flag>1)cut[u]=1;
}
}
else if(i!=(fe^1))low[u]=min(low[u],dfn[v]);
}
if(cut[u])ans[u]+=(long long)(n-1-sum)*(sum+1)+n-1;
else ans[u]=(n-1)<<1;
}
void solve(){
root=1,dfs(1,0);
for(int i=1;i<=n;i++)printf("%lld\n",ans[i]);
}
int main(){
read_and_parse();
solve();
return 0;
}
【洛谷P3469】BLO的更多相关文章
- 洛谷 P3469 [POI2008]BLO-Blockade (Tarjan,割点)
P3469 [POI2008]BLO-Blockade https://www.luogu.org/problem/P3469 题目描述 There are exactly nn towns in B ...
- 洛谷 - P3469 - BLO-Blockade - 割点
https://www.luogu.org/problem/P3469 翻译:一个原本连通的无向图,可以删除图中的一个点,求因为删除这个点所导致的不连通的有序点对的数量.或者说,删去这个点之后,各个连 ...
- 「洛谷P3469」[POI2008]BLO-Blockade 解题报告
P3469[POI2008]LO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个 ...
- 洛谷P3469[POI2008]BLO-Blockade
题目 割点模板题. 可以将图中的所有点分成两部分,一部分是去掉之后不影响图的连通性的点,一部分是去掉之后影响连通性的点,称其为割点. 然后分两种情况讨论,如果该点不是割点,则最终结果直接加上2*(n- ...
- 【洛谷P3469】[POI2008]BLO-Blockade
BLO-Blockade 题目链接 若一个点为割点:统计出每个子树的大小,两两相乘再相加, 再加上n-1,为这个点与其他点的拜访数, 因为拜访是互相的,最后再乘二即可 若一个点不是割点:只有(n-1) ...
- 【洛谷 P3469】[POI2008]BLO-Blockade(割点)
题目链接 题意:一个无向联通图,求删去每个点及其所有边后有多少有序点对的连通性发生了变化. Tarjan求割点的例题.. 如果当前点不是割点,那么它对整个图的连通性不产生影响,只有自己与其他\(n-1 ...
- 洛谷 [P3496] BLO
割点 首先 tarjan 求割点, 对于不是割点的点, 答案是 2 * (n-1) 有序,所以要乘 2 对于是割点的点, 答案是删去该点后所有连通块的个数加上 n-1 在乘 2 #include &l ...
- 洛谷 P3469 [POI2008]BLO-Blockade 题解
一道经典的割点例题,用size数组记录该子树有多少个节点,sum是这棵搜索树上有多少个节点,sum*(n-sum-1)是将点删掉后的数对数量. #include<iostream> #in ...
- 题解 洛谷P3469
题目每个割点去掉后会导致多少对点不能连通 考虑跑Tarjan的时候记录每个儿子的size,那么去掉这个割点后其他的点都不能和这个儿子连通 注意每个点去掉后它本身就不能与其他所有点连通 还有就是题目里求 ...
随机推荐
- MVC 使用cshtml的一些基础知识-和相关整理
首先在认识cshtml之前,先要了解一下Razor视图引擎 如果对此有疑问的话可以借鉴 博客园博文:http://kb.cnblogs.com/page/96883/ 或 博客博文:http://ww ...
- ActiveMQ 填坑记
前言 MQ是现在大型系统架构中必不可少的一个重要中间件,之前有偏文章<MQ(消息队列)常见的应用场景解析>介绍过MQ的应用场景,现在流行的几个MQ是rabbitmq,rocketma,ka ...
- 理解Vue 2.5的Diff算法
DOM"天生就慢",所以前端各大框架都提供了对DOM操作进行优化的办法,Angular中的是脏值检查,React首先提出了Virtual Dom,Vue2.0也加入了Virtual ...
- 个人项目Week1
一.项目时间规划与实际用时 PSP2.1 Personal Software Process Stages 预计时间/h 实际时间/h Planning 计划 · Estimate · 估计这 ...
- 《Linux内核设计与实现》第四章读书笔记
4.1 多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 多任务系统可以划分为两类: 非抢占式多任务进程会一直执行直到自己主动停止运行 抢占式多任务Linux/Unix使用的是抢占式 ...
- (Alpha)Let's-M1后分析报告
Chronos团队Let's项目 Postmortem结果 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 在最初的用户需求和市场调研方面,团队进 ...
- Java 类的加载
package com.cwcec.p2; class C { public static final int SIZE; static { SIZE = 100; System.out.printl ...
- JWT验证
理解 JSON Web Token(JWT) 验证 JSON Web Token认证的操作指南 在本文中,我们将了解JSON Web Token的全部内容. 我们将从JWT的基本概念开始,然后查看其结 ...
- [BUAA_SE_2017]第零次博客
结缘计算机 你为什么选择计算机专业?你认为条件如何? 计算机是你喜欢的领域吗?是你擅长的领域吗? 说来也巧,高考选择专业时并不知道自己会这般喜欢计算机这个专业,却将其填在了北航的第一志愿. 第一次接触 ...
- java mail smtp port
https://www.tutorialspoint.com/javamail_api/javamail_api_smtp_servers.htm https://www.mkyong.com/jav ...