1123: [POI2008]BLO
1123: [POI2008]BLO
Time Limit: 10 Sec Memory Limit: 162 MB
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1123
Description
Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。
Input
输入n<=100000 m<=500000及m条边
Output
输出n个数,代表如果把第i个点去掉,将有多少对点不能互通。
Sample Input
1 2
2 3
1 3
3 4
4 5
Sample Output
8
16
14
8
题意叙述不清。
题目大意:给定N个点M条边的无向图,问删除每个点后,对于有序数对(x,y)满足x,y互不连通的数对数。其中,被删掉的点也应被统计。
这种和删点,联通有关的,可以考虑割点/点双联通分量。
题解:这一题中蕴含的技巧就是求割点时计算其将图分成了多少个大小为多少的连通块。
因为答案就是这些连通块大小互相乘的和。
关键在于,再求割点时维护一个vis[i]代表搜索树中这个子树的大小。
因为一个割点将图分成的连通块是其下面的所有子树(互不相连)与这个点上面的所有点。tmp表示这个点的子树之前的同父亲子树的和。为什么这么算可以得到答案,可以自己推一推。
不要忘记最后答案要乘2。
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn = 100005, maxm = 1000005; int n,m,dfn[maxn],tot,low[maxn],idx,h[maxn]; ll siz[maxn], ans[maxn]; struct edge{int v,nxt; }G[maxm]; void add(int u, int v){G[++tot].v = v;G[tot].nxt = h[u]; h[u] = tot; }void tarjan(int u, int f){dfn[u] = low[u] = ++idx;siz[u] = 1;ll t = 0;for(int i = h[u]; i; i = G[i].nxt){int v = G[i].v;if(v == f)continue;if(dfn[v])low[u] = min(low[u], dfn[v]);else {tarjan(v, u);low[u] = min(low[u], low[v]);siz[u] += siz[v];if(dfn[u] <= low[v]){// ans[u] += siz[v] * t;t += siz[v]; }}}ans[u] += (n - t - 1) * t; }int main(){scanf("%d%d",&n,&m);for(int i = 1; i <= m; i++){int u, v;scanf("%d%d",&u,&v);add(u, v); add(v, u);}for(int i = 1; i <= n; i++)if(!dfn[i])tarjan(i, -1);for(int i = 1; i <= n; i++)printf("%lld\n",(ans[i]+n-1)*2); }
View Code
转载于:https://www.cnblogs.com/EdSheeran/p/9029346.html
1123: [POI2008]BLO相关推荐
- bzoj 1123: [POI2008]BLO(Trajan求割点)
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1468 Solved: 678 [Submit][Statu ...
- BZOJ 1123: [POI2008]BLO
Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. 删去某点后会出现点对不连通的情况,那么这个点一 ...
- bzoj 1123: [POI2008]BLO (tarjan求点双+树形DP)
题目描述 传送门 题目大意:给出一个无向连通图,求删去一个点后有多少点对不连通. 题解 tarjan求点双,然后对于点双新建节点,并连接所有点双中的节点,形成一棵树后进行树形DP即可. 代码 #inc ...
- BZOJ 1123 POI2008 BLO Tarjan+树形DP
题目大意:给定一张无向图,求每个点被封锁之后有多少个有序点对(x,y)(x!=y,1<=x,y<=n)满足x无法到达y 还是看原题面爽... Tarjan求点双,然后TreeDP即可 时间 ...
- 【BZOJ1123】 [POI2008]BLO (tarjan)
tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好. 1 const maxn=100419; 2 maxm=1000419; 3 type ...
- BZOJ1123 [POI2008]BLO
tarjan求割点,乘法原理统计答案,对数答案翻倍. By:大奕哥 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int ...
- bzoj1123 [POI2008]BLO 圆方树
Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. 输入n<=100 ...
- 【bzoj1123】[POI2008]BLO
*题目描述: Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. *输入 输入n<=1000 ...
- BZOJ_P1123 [POI2008]BLO(无向图割点)
BZOJ传送门 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 810 Solved: 344 [Submit][Status][Discuss] De ...
最新文章
- 硬核!Python 四种变量的代码对象和反汇编分析
- android 自定义event,Android运用onTouchEvent自定义滑动布局
- 2020年数据中心值得关注的8大趋势
- F4+2 团队项目软件设计方案
- license 验证服务器唯一机器码_代码审计工具Fortify 17.10及Mac平台license版本
- 使用 GraalVM 将纯 JavaFX 项目打包成 EXE
- 富人和穷人的八大差异
- CIF进口货物流程图_广州进口报关公司阿根廷红酒上海进口清关成本选择聚海
- aix查看oracle用户密码,AIX详细查看用户/进程使用内存
- QT每日一练day13:QFileDialog文件浏览框
- 如何正确地开启Facebook广告营销大门?
- 基类成员函数和派生类成员函数不构成重载
- 【Proteus仿真8086实验一】RAM存储器62256
- RT-Thread与cubemx|74HC595驱动数码管详解
- 房产中介管理系统,房产中介预约看房系统,看房预约系统毕设作品
- 在ASP.NET中获取参数POST和GET方式提交的参数
- 揭开关于激光雷达传感器的常见误区——第二部分
- 不惧变化 抓住机遇 | A+CLUB 8月深圳站
- Frida出现process with pid XXXX either refused to load frida-agent, or terminated during injection错误的原因
- UG NX与PLC-1500的在环虚拟测试
热门文章
- 从零开始java数据库SQL优化(二):多个LEFT JOIN的SQL优化
- 移动光驱装服务器系统盘,光驱别扔,可以改装成移动光驱用
- 会议室管理系统jsp和mysql_基于jsp+mysql+servlet的JSP会议-会议室管理系统
- GitHub 上一款全能高速下载工具!堪比某度的会员
- React-moveable的使用
- 开发也可以如此简单!华为云发布两款开发工具
- c# wifi串口通信_在C#中实现串口通信的方法
- 使用Termux在安卓手机上搭建本地Git服务器
- 解决Vue启动报错 npm ERR! @1.0.0 dev: node build/dev-server.js
- jQuery--复制节点clone()详解