luogu3469 [POI2008]BLO_Blockade
题目大意
给一个无向连通图,求对于每一个点,去掉该点后图中连通结点有序对的减少量。
思路
当时想这道题时,我想到:枚举每一个点,在删去它后连通的几个部分中Dfs得到各个部分的点的个数从而得到解,但是我忘了:割点的定义便是删去该点后,图能被分成多个连通部分的点!所以我们用Tarjan算法Dfs得到割点,同时得到被割点分成的各个大部分的结点总数(包括Dfs后的部分 和 正在及即将要Dfs的部分)即可得到答案。其它不是割点的结点的影响都是(n-1)*2。
注意事项
- 特殊判定根节点!
- 仍然记住一个点是割点不代表与割点相连的结点都属于不同的边双连通分量。所以求“正在及即将要Dfs的部分”内的结点总数时,参与运算的“Dfs后的部分”内的结点总数必须是 部分的头的low>=cur->DfsN的部分内的结点总数,而不是所有Dfs过到的结点的总数。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std; #define ll long long
const int MAX_NODE = 100010; struct Node
{
vector<Node*> Next;
bool IsCut;
int DfsN, Low;
ll Effect;
}_nodes[MAX_NODE];
int DfsCnt, _vCount; int Dfs(Node *cur)
{
cur->DfsN = cur->Low = ++DfsCnt;
int subSizeSum = 0, cutSubSizeSum = 0, cnt = 0, tempRootCutSize = 0;
ll cutEffect = 0;
for (unsigned int i = 0; i < cur->Next.size(); i++)
{
if (!cur->Next[i]->DfsN)
{
cnt++;
int subSize = Dfs(cur->Next[i]);
subSizeSum += subSize;
cur->Low = min(cur->Low, cur->Next[i]->Low);
if (cur->DfsN <= cur->Next[i]->Low)
{
if (cur != _nodes + 1 || cnt > 1)
cur->IsCut = true;
cutEffect += (ll)subSize * (ll)(_vCount - subSize - 1);
cutSubSizeSum += subSize;
}
}
else
cur->Low = min(cur->Low, cur->Next[i]->DfsN);
}
cutEffect += (ll)(_vCount - cutSubSizeSum - 1) * (ll)cutSubSizeSum;
cur->Effect = (_vCount - 1) * 2;
if (cur->IsCut)
cur->Effect += cutEffect;
return subSizeSum + 1;
} int main()
{
int totEdge;
scanf("%d%d", &_vCount, &totEdge);
for (int i = 1; i <= totEdge; i++)
{
int u, v;
scanf("%d%d", &u, &v);
_nodes[u].Next.push_back(_nodes + v);
_nodes[v].Next.push_back(_nodes + u);
}
Dfs(_nodes + 1);
for (int i = 1; i <= _vCount; i++)
printf("%lld\n", _nodes[i].Effect);
return 0;
}
luogu3469 [POI2008]BLO_Blockade的更多相关文章
- luogu3469 [POI2008]BLO-Blockade
#include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...
- [BZOJ1112][POI2008]砖块Klo
[BZOJ1112][POI2008]砖块Klo 试题描述 N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另 ...
- [bzoj1122][POI2008]账本BBB
1122: [POI2008]账本BBB Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 402 Solved: 202[Submit][Status ...
- BZOJ 1113: [Poi2008]海报PLA
1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1025 Solved: 679[Submit][Statu ...
- BZOJ 1116: [POI2008]CLO
1116: [POI2008]CLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 922 Solved: 514[Submit][Status][ ...
- BZOJ 1112: [POI2008]砖块Klo
1112: [POI2008]砖块Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1736 Solved: 606[Submit][Statu ...
- BZOJ 1124: [POI2008]枪战Maf
1124: [POI2008]枪战Maf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 617 Solved: 236[Submit][Status ...
- BZOJ 1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1030 Solved: 440[Submit][Status] ...
- BZOJ 1121: [POI2008]激光发射器SZK
1121: [POI2008]激光发射器SZK Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 792 Solved: 653[Submit][Sta ...
随机推荐
- [ SCOI 2005 ] 最大子矩阵
\(\\\) \(Description\) 给出一个\(N\times M\)的有权矩阵,选出其中\(K\)个互不重叠的子矩阵,使得这\(K\)个子矩阵的权值和最大. \(N\in [1,100]\ ...
- 前端开发之旅-zopim在线即时聊天客服
一.与潜在客户实时聊天的神奇-zopim Zopim是一款高效的可嵌入网页中去的即使通讯与网站访客信息追踪的的Web软件.知道谁在访问您的网站吗?想和他们实时交流吗?想更有效的把握商机吗?使用Zopi ...
- [Windows Server 2003] 服务器安全加固
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:服务器安全加固 ...
- codeforces_738D
D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- HDU_1160_FatMouse's Speed_dp
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 删数据ORA-02292主键约束问题
通常在删除某个表A的时候,会出现这个错误.原因是另一个表B的某个字段引用了A表的某个字段作为约束(这个的另一个说法是外键). 假如引用的字段叫field,当B.field = A.field , 而你 ...
- Windows下Unity安装
安装教程: https://www.paws3d.com/lesson/us-0101/ 问题1: 安装并完成注册后,在网页上能登录,但打开Unity时不能启动成功,一直停留在如下界面 解决方案:断网 ...
- 使用jquery将表单自动封装成json对象 /json对象元素的添加删除和转换
$.fn.serializeObject = function () { var o = {}; var a = this.serializeArray(); $.each(a, function ( ...
- jquery spa
1.hashchange监听 2.根据url加载不同页面 $.ajax({ url:"/xx/xx.html" type:"get", dataType:&qu ...
- 踪电子表格中的单元格(Spreadsheet Tracking, ACM/ICPC World Finals 1997, UVa512)
有一个r行c列(1≤r,c≤50)的电子表格,行从上到下编号为1-r,列从左到右编号为1 -c.如图4-2(a)所示,如果先删除第1.5行,然后删除第3, 6, 7, 9列,结果如图4-2(b) 所示 ...