正题

[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,洛谷之提高历练地,强连通分量相关推荐

  1. 小a和uim之大逃离,洛谷之提高历练地,动态规划TG.lv(1)(3-2)

    正题 第二题:小a和uim之大逃离 这题有点烦,但是我们可以从k入手,大小为k的魔瓶,可以装的容量为0到k,那么相当于我们每一次mod 一下k 就行了. 我们当然也可以从小a和小uim的魔瓶差入手,我 ...

  2. 上白泽慧音,洛谷之提高历练地,较复杂图论II

    正题 第二题:上白泽慧音 这道题就是裸裸的Tarjan强联通咯~ 我们找出每个环,判断一下每个环的大小.排一下序输出即可. 代码<模板要背熟> #include<cstdio> ...

  3. 高手过招,洛谷之提高历练地,博弈论(3-6)

    正题 第6题:高手过招 这题主要运用的是模拟来查找Sg. 根据题意可以知道,当前行的状态可以用一个二进制数来表示,1表示有棋子,0表示没有棋子. 所以我们遍历每一位,如果当前这位有棋子,而且它的右边是 ...

  4. 洛谷P1003 铺地毯 noip2011提高组day1T1

    洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...

  5. 信息学奥赛一本通 1844:【06NOIP提高组】金明的预算方案 | 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案

    [题目链接] ybt 1844:[06NOIP提高组]金明的预算方案 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案 [题目考点] 1. 动态规划:分组背包 2. 动态规划:依赖背包 ...

  6. 信息学奥赛一本通 1890:【15NOIP提高组】跳石头 | 洛谷 P2678 [NOIP2015 提高组] 跳石头

    [题目链接] ybt 1890:[15NOIP提高组]跳石头 洛谷 P2678 [NOIP2015 提高组] 跳石头 ybt 1247:河中跳房子 OpenJudge NOI 1.11 10:河中跳房 ...

  7. 信息学奥赛一本通 1848:【07NOIP提高组】字符串的展开 | OpenJudge NOI 1.7 35:字符串的展开 | 洛谷 P1098 [NOIP2007 提高组] 字符串的展开

    [题目链接] ybt 1848:[07NOIP提高组]字符串的展开 OpenJudge NOI 1.7 35:字符串的展开 洛谷 P1098 [NOIP2007 提高组] 字符串的展开 [题目考点] ...

  8. 信息学奥赛一本通 1855:【09NOIP提高组】潜伏者 | OpenJudge NOI 1.7 11:潜伏者 | 洛谷 P1071 [NOIP2009 提高组] 潜伏者

    [题目链接] ybt 1855:[09NOIP提高组]潜伏者 OpenJudge NOI 1.7 11:潜伏者 洛谷 P1071 [NOIP2009 提高组] 潜伏者 [题目考点] 1. 字符串 2. ...

  9. 信息学奥赛一本通 1820:【00NOIP提高组】进制转换 | 洛谷 P1017 [NOIP2000 提高组] 进制转换

    [题目链接] ybt 1820:[00NOIP提高组]进制转换 洛谷 P1017 [NOIP2000 提高组] 进制转换 注意:两OJ上题目内容相同,输入输出要求不同 [题目考点] 1.数制 [解题思 ...

最新文章

  1. pip install scipy和matplotlib报错的问题详解:(pip install其它时报错通用)
  2. 模块可测性设计之无损插桩
  3. GPUImage混合滤镜处理图片
  4. 字符串之将整数字符串转成整数值
  5. 公共样式_设计干货 | 园路铺装的100种样式,保存收好
  6. python读取每一行文字二十四_python接口自动化(二十四)--unittest断言——中(详解)...
  7. C#LeetCode刷题之#485-最大连续1的个数(Max Consecutive Ones)
  8. Python模块(二)(序列化)
  9. matlab符号运算实验,数学实验6--Matlab符号运算.pptx
  10. could not connect to smtp host java_服务器发送邮件出现Could not connect to SMTP host错误 解决办法...
  11. 微信小程序-制作购物车
  12. android手机不能发短信,解决安卓手机发送短信失败的方法
  13. springboot 整合 邮件发送
  14. Virtex6 PCIe 超简版基础概念学习(二)(转载)
  15. Ubuntu 无法连接网络
  16. CS4398音频解码替代芯片DP4398完全兼容DAC解码
  17. 同大取大同小取小口诀图解_不等式取值口诀
  18. LFI/RFI漏洞相关
  19. 病毒分析之撒旦(Satan)勒索病毒分析解密(AES256 ECB算法)
  20. am命令发送广播以及查看已发送广播信息

热门文章

  1. 安卓linux层,Android 系统架构各层介绍
  2. 将GIF转成视频MP4、MOV
  3. gif怎么转换html,gif如何转换成视频 gif转视频软件
  4. 企业为什么要大力推进OA办公?
  5. JAVA —— 比较日期时间大小
  6. SNAT(源地址转换)
  7. async-excel整合站内信通知用户体验感满满
  8. Tomcat And Servlet (1)
  9. 惊闻女程序员公开举报:摩拜单车前端组 leader 性骚扰下属!
  10. 王垠的面试 和 P 与 NP