[POI2008]BLO-Blockade,洛谷之提高历练地,强连通分量
正题
[POI2008]BLO-Blockade
这一题很神奇啊~
我们来想想两个点不能连通和强连通有什么关系。
那么其实很明显,如果当前点所遍历到的子节点不能遍历到祖先节点,那么说明子节点只能通过该点来去到祖先节点,这样产生的有序点对数量就是son[x]*(n-son[x]-1)*2,(假设当前点为x,则儿子节点即为son[x])
所以可以延伸出来一个概念——割点,割点即为去掉该点后,原图被分为更多的连通块。
所以我们判断该儿子是否只能通过该点到达祖先节点,是的话那就要加上答案,否则就不用理。
具体看下代码,不懂怎么判割点的建议去学一学
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<stack>
#include<iostream>
using namespace std;int m;
long long n;
struct edge{int y,next,x;
}s[1000010];
struct node{int dfn,low;
}op[100010];
long long ans[100010];
int first[100010];
long long size[100010];
int len=0;
int now=0;void ins(int x,int y){len++;s[len].y=y;s[len].next=first[x];first[x]=len;
}void Tarjan(int x){op[x].low=op[x].dfn=++now;size[x]=1;long long t=0;for(int i=first[x];i!=0;i=s[i].next){int y=s[i].y;if(op[y].dfn==0){//如果y没有被遍历过Tarjan(y);//往下搜size[x]+=size[y];//size[x]表示x的子树大小if(op[y].low<op[x].low) op[x].low=op[y].low;//用儿子节点的low来更新自己的lowif(op[x].dfn<=op[y].low){//没错,op[x].dfn<=op[y].low表示y不能通过其他路径遍历到祖先以及其他非该子树节点,即x是割点ans[x]+=t*size[y];//t表示前面的点,用t乘上size[y]意思就是y所在子树的每一个点不能到前面的t个点。t+=size[y];//更新t}}else if(op[y].dfn<op[x].low) op[x].low=op[y].dfn;//更新low}ans[x]+=t*(n-t-1);//该子树的点不能到达祖先
}int main(){scanf("%lld %d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d %d",&x,&y);ins(x,y),ins(y,x);//无向图建边}for(int i=1;i<=n;i++)if(op[i].dfn==0) Tarjan(i);//跑Tarjan算答案for(int i=1;i<=n;i++)printf("%lld\n",(ans[i]+n-1)<<1);//输出,记得加上(n-1)*2,因为这个点不能去到其他的n-1个点,乘二是因为双向点对
}
[POI2008]BLO-Blockade,洛谷之提高历练地,强连通分量相关推荐
- 小a和uim之大逃离,洛谷之提高历练地,动态规划TG.lv(1)(3-2)
正题 第二题:小a和uim之大逃离 这题有点烦,但是我们可以从k入手,大小为k的魔瓶,可以装的容量为0到k,那么相当于我们每一次mod 一下k 就行了. 我们当然也可以从小a和小uim的魔瓶差入手,我 ...
- 上白泽慧音,洛谷之提高历练地,较复杂图论II
正题 第二题:上白泽慧音 这道题就是裸裸的Tarjan强联通咯~ 我们找出每个环,判断一下每个环的大小.排一下序输出即可. 代码<模板要背熟> #include<cstdio> ...
- 高手过招,洛谷之提高历练地,博弈论(3-6)
正题 第6题:高手过招 这题主要运用的是模拟来查找Sg. 根据题意可以知道,当前行的状态可以用一个二进制数来表示,1表示有棋子,0表示没有棋子. 所以我们遍历每一位,如果当前这位有棋子,而且它的右边是 ...
- 洛谷P1003 铺地毯 noip2011提高组day1T1
洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...
- 信息学奥赛一本通 1844:【06NOIP提高组】金明的预算方案 | 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案
[题目链接] ybt 1844:[06NOIP提高组]金明的预算方案 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案 [题目考点] 1. 动态规划:分组背包 2. 动态规划:依赖背包 ...
- 信息学奥赛一本通 1890:【15NOIP提高组】跳石头 | 洛谷 P2678 [NOIP2015 提高组] 跳石头
[题目链接] ybt 1890:[15NOIP提高组]跳石头 洛谷 P2678 [NOIP2015 提高组] 跳石头 ybt 1247:河中跳房子 OpenJudge NOI 1.11 10:河中跳房 ...
- 信息学奥赛一本通 1848:【07NOIP提高组】字符串的展开 | OpenJudge NOI 1.7 35:字符串的展开 | 洛谷 P1098 [NOIP2007 提高组] 字符串的展开
[题目链接] ybt 1848:[07NOIP提高组]字符串的展开 OpenJudge NOI 1.7 35:字符串的展开 洛谷 P1098 [NOIP2007 提高组] 字符串的展开 [题目考点] ...
- 信息学奥赛一本通 1855:【09NOIP提高组】潜伏者 | OpenJudge NOI 1.7 11:潜伏者 | 洛谷 P1071 [NOIP2009 提高组] 潜伏者
[题目链接] ybt 1855:[09NOIP提高组]潜伏者 OpenJudge NOI 1.7 11:潜伏者 洛谷 P1071 [NOIP2009 提高组] 潜伏者 [题目考点] 1. 字符串 2. ...
- 信息学奥赛一本通 1820:【00NOIP提高组】进制转换 | 洛谷 P1017 [NOIP2000 提高组] 进制转换
[题目链接] ybt 1820:[00NOIP提高组]进制转换 洛谷 P1017 [NOIP2000 提高组] 进制转换 注意:两OJ上题目内容相同,输入输出要求不同 [题目考点] 1.数制 [解题思 ...
最新文章
- pip install scipy和matplotlib报错的问题详解:(pip install其它时报错通用)
- 模块可测性设计之无损插桩
- GPUImage混合滤镜处理图片
- 字符串之将整数字符串转成整数值
- 公共样式_设计干货 | 园路铺装的100种样式,保存收好
- python读取每一行文字二十四_python接口自动化(二十四)--unittest断言——中(详解)...
- C#LeetCode刷题之#485-最大连续1的个数(Max Consecutive Ones)
- Python模块(二)(序列化)
- matlab符号运算实验,数学实验6--Matlab符号运算.pptx
- could not connect to smtp host java_服务器发送邮件出现Could not connect to SMTP host错误 解决办法...
- 微信小程序-制作购物车
- android手机不能发短信,解决安卓手机发送短信失败的方法
- springboot 整合 邮件发送
- Virtex6 PCIe 超简版基础概念学习(二)(转载)
- Ubuntu 无法连接网络
- CS4398音频解码替代芯片DP4398完全兼容DAC解码
- 同大取大同小取小口诀图解_不等式取值口诀
- LFI/RFI漏洞相关
- 病毒分析之撒旦(Satan)勒索病毒分析解密(AES256 ECB算法)
- am命令发送广播以及查看已发送广播信息