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 ...
随机推荐
- 使用 RxJava 的正确姿势
最近在使用 RxJava 时遇到了一些比较诡异的问题,排查的过程中做了点研究,发现平时大家的用法多多少少都有些问题.有些地方存在隐患,有些用法不够简练,我把这些问题简单做一下分类和总结,供大家参考. ...
- Python语言之数据结构2(字典,引用)
1.字典 键值对. dict={ "key1" : "value1", "key2" : "value2" } #add ...
- 您厉害您赚得多:聪明投资者的聊天记录,雪球CEO的21条投资理念
3星|<您厉害您赚得多>:雪球创始人的投资理念.原则.技巧,及其在雪球上跟一些用户的互动的内容 作者是雪球创始人.CEO,全书基本是作者的一些投资理念+作者在雪球上跟用户的互动的内容,还有 ...
- Centos6.7 安装zabbix+apache+mysql教程(第一篇)
Centos6.7 安装zabbix+apache+mysql教程 blog地址: http://www.cnblogs.com/caoguo ### 基本包安装 ### [root@ca0gu0 ~ ...
- 微信小程序video
1.video是原生组件原生组件的层级是最高的,想要覆盖在video上,只能用cover-view 和 cover-image 组件,这2个可以无限嵌套.适用场景:给视频加标题: 2.检测video播 ...
- ARX中类型强制转换
比如 克隆 clone, 获得的是一个acrxobject, acrxobject *pobj=pployline->clone(); acdbpolyline *ppoly=acdbpolyl ...
- .net core发布程序
这里说的是,和.net core运行库一起发布,所以,目标运行系统,可以不安装.net core也能运行 1.project.json 把dependencies里面的type删除掉,后面加入&quo ...
- 谷歌通过ajax获取本地JSON文件,为什么会提示跨域?
在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 下 ...
- 《Mysql - 到底可不可以使用 Join ?》
一:Join 的问题? - 在实际生产中,使用 join 一般会集中在以下两类: - DBA 不让使用 Join ,使用 Join 会有什么问题呢? - 如果有两个大小不同的表做 join,应该用哪个 ...
- yagmail邮件模块
昨天接到一个需求,就是要求用邮件发送一html文件.这里我想到了用yagmail #!/usr/bin/env python #-*- coding:utf-8 -*- import yagmail ...