正题


题目大意

求每个点是多少个点对之间路径的必经点。


解题思路

首先若一个点是在点不是割点,那么答案就是n−1n-1n−1,因为这个点不是除了它自己以为任何点对的必经点。

之后我们记录每个可以割掉的联通分量的大小。对于一个割点,是两种路径的必经点。

  1. 从外连入内
  2. 这个点连接的点双之间互相到达

分开计算就好了。


codecodecode

#include<cstdio>
#include<stack>
#include<queue>
#include<cstring>
#define N 50010
using namespace std;
struct line{int to,next;
}a[N*4];
int tot,ls[N],siz[N],dfn[N],low[N],num,n,ans[N],m;
bool v[N];
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void tarjan(int x,int fa)//tarjan
{dfn[x]=low[x]=++num;int L=0;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;v[y]=0;if(!dfn[y]){tarjan(y,x);siz[x]+=siz[y];if(dfn[x]<=low[y])L+=siz[y];v[y]=1;}if(y!=fa)low[x]=min(low[y],low[x]);}//以上求low和dfn以判断割点int A=0,B=0;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dfn[x]<=low[y]&&v[y]){A+=(L-siz[y])*siz[y];//点内互相到达B+=(n-L-1)*siz[y];//外连内}}A/=2;ans[x]=A+B+n-1;
}
int main()
{freopen("data.in","r",stdin);freopen("data.out","w",stdout);scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}num=0;for(int i=1;i<=n;i++)siz[i]=1;tarjan(1,0);for(int i=1;i<=n;i++)printf("%d\n",ans[i]);
}

jzoj3896-战争游戏【tarjan,割点,点双联通分量】相关推荐

  1. 学习有向图和无向图的强连通分量(基本概念+割点+点双联通分量+桥+边双连通分量+全套模板【Tarjan】)

    最近总是考到Tarjan,让我措手不及 基本概念 割点以及点双连通分量 Tarjan法求割点 推导过程 代码实现 Tarjan法求点双连通分量 推导过程 代码实现 有向图的Tarjan缩点 桥与边双连 ...

  2. Tarjan点的双联通(寻找割点)

    问题概述:给你一个无向联通图,你要在图中标记一些点,使得这个图中的任意一个点消失了,剩余的点都可以通 过一条路径到达你某个标记的点.问你最少需要选择多少个点,并且在最优的情况下有多少总选点方案,(每个 ...

  3. 『Tarjan算法 无向图的双联通分量』

    无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...

  4. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  5. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)

    [题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...

  6. Tarjan边的双联通

    1076 2条不相交的路径 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 给出一个无向图G的顶点V和边E.进行Q次查询,查询从G的某个顶点V[s] ...

  7. 【BZOJ2730】【codevs1996】矿场建设,点双联通分量

    传送门1 传送门2 思路: 前段时间学习的tarjan求双联通分量 练习的时候碰到了这样一道蛋疼的题 基本思路还是显而易见的,考虑分割联通快及计算大小来求出答案 由于之前写的都是边双联通分量,可以把无 ...

  8. 强连通分量/点双连通分量/边双联通分量 总结

    前言 % 被某brz逼着问,觉得很有必要好好复习一下这 些 毒瘤东西. 定义 % 连通 如果有向图中的两点 uuu,vvv 间同时存在 uuu 到 vvv 的路径及 vvv 到 uuu 的路径,则称点 ...

  9. 矿场搭建(割点+找点联通分量)

    G-[HNOI2012]矿场搭建_2022图论班第二章连通性例题与习题 (nowcoder.com) 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤 ...

最新文章

  1. 在Git存储库中查找并恢复已删除的文件
  2. 预测人民币在2006年最终的收盘价
  3. 李开复:职场人35岁以后,真诚比面子重要,均衡比魄力重要!
  4. hdu 1203 I NEED A OFFER!
  5. IDE硬盘,SATA硬盘,SCSI硬盘有什么区别
  6. 迅速掌握Unix编程
  7. Asp.Net Core获取请求信息/获取请求地址
  8. 「雅礼集训 2017 Day7」事情的相似度(后缀自动机+LCT+树状数组)
  9. jsp 上传转码_最完整的处理jsp处理乱码问题步骤,不需要手工转码
  10. leetcode 188. 买卖股票的最佳时机 IV(dp)
  11. SecureCRT远程连接Ubuntu,SecureCRT开发环境配置
  12. .net开发常用工具备忘录
  13. TensorFlow by Google #10使用 NLP 构建讽刺分类器 Using NLP to build a sarcasm classifier
  14. 最小生成树详细讲解(Prime算法+Kruskalsuanfa)
  15. 本命年第三季度阶段反思
  16. mysql where in and_mysql中 where in 用法详解
  17. win10+cuda10.0+pytorch安装
  18. 什么是大数据?大数据能为我们带来什么?
  19. 微信发红包功能的实现
  20. Jenkins + GitBlit自动构建

热门文章

  1. laya 怎么生成签名_PHP开发API接口签名生成及验证
  2. 32位mysql安装包_MySQL安装指南(CPT103)
  3. java获取jtable的路径,Java如何在JTable组件中获取选定的单元格?
  4. 职称计算机还用考试,职称计算机考试注意事项
  5. 算法设计与分析——回溯法——批处理作业调度
  6. [mybatis]sqlSessionFactory.openSession()
  7. [蓝桥杯2016决赛]路径之谜
  8. 数据结构---邻接矩阵的DFS
  9. ImportError: No module named google.protobuf.internal
  10. Ubuntu failed to fetch ... hash sum mismatch