LOJ10104Blockade
POI 2008
Byteotia 城市有 n 个城镇,m 条双向道路。每条道路连接两个不同的城镇,没有重复的道路,所有城镇连通。
输出 n 个数,代表如果把第i 个点去掉,将有多少对点不能互通。
输入格式
输入 n,m 及 m 条边。
输出格式
输出 n 个数,代表如果把第 i 个点去掉,将有多少对点不能互通。
样例
样例输入
5 5
1 2
2 3
1 3
3 4
4 5

样例输出
8
8
16
14
8
数据范围与提示
n<=1e5,m<=5e5。
______________________________________________________
tarjan算法,去掉某一点后产生的点对主要有三种:
1、u点和其他的点
2、u点下的各个子树内的点与其他的点(不含u)
3、u点下的所有子树外的点(可以理解为父亲方向上的子树,但包含于u点同双联通的点)到其他的点
______________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1e5+10;
4 const int maxm=5e5+10;
5 int n,m;
6 struct edge
7 {
8 int u,v,nxt;
9 bool ok;
10 }e[maxm<<1];
11 int head[maxn],js;
12 void addage(int u,int v)
13 {
14 e[++js].u=u;e[js].v=v;
15 e[js].nxt=head[u];head[u]=js;
16 }
17 int dfn[maxn],low[maxn],cnt,sz[maxn],ch[maxn];
18 long long ans[maxn];
19 int fx(int x)
20 {
21 return x&1?x+1:x-1;
22 }
23 void tarjan(int u)
24 {
25 dfn[u]=low[u]=++cnt;
26 sz[u]=1;
27 ans[u]=(n-1)<<1; //当前点与其他点之间的点对
28 for(int i=head[u];i;i=e[i].nxt)
29 if(!e[i].ok)
30 {
31 int v=e[i].v;
32 e[fx(i)].ok=1;
33 if(!dfn[v])
34 {
35 tarjan(v);
36 sz[u]+=sz[v];
37 low[u]=min(low[u],low[v]);
38 if(low[v]>=dfn[u])
39 {
40 ans[u]+=(long long)sz[v]*(n-sz[v]-1); //当前v节点为根的子树到树上其他点的点对(不包含u点)
41 ch[u]+=sz[v];
42 }
43 }
44 else low[u]=min(low[u],dfn[v]);
45 }
46 ans[u]+=(long long)(n-ch[u]-1)*ch[u]; //树去掉u为根的子树而产生的子树(不包含与u同双联通分量的点)中的点到到树中其他的点得点对
47 }
48 int main()
49 {
50 scanf("%d%d",&n,&m);
51 for(int u,v,i=0;i<m;++i)
52 {
53 scanf("%d%d",&u,&v);
54 addage(u,v);
55 addage(v,u);
56 }
57 tarjan(1);
58 for(int i=1;i<=n;++i)printf("%lld\n",ans[i]);
59 return 0;
60 }
LOJ10104Blockade的更多相关文章
随机推荐
- Gitlab Runner的分布式缓存实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Zookeeper一致性协议——ZAB
ZAB协议简介 Zookeeper通过ZAB保证分布式事务的最终一致性. ZAB全称Zookeeper Atomic Broadcast(ZAB,Zookeeper原子消息广播协议) ZAB是一种专门 ...
- tcp聊天
package tcp; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; i ...
- SpringBoot框架中解决日期展示问题
解决日期展示问题(返回的json中日期的格式是:"birthday":"1988-08-07T15:00:00.000+0000");需要转化成指定的格式(年月 ...
- 一次mongo查询不存在字段引发的事故
话说今天的一个小小的查询失误给了我比较深刻的教训,也让我对mongo有了更深刻的理解,下面我们来说说这个事情的原委: 我们经常使用阿里云子账号在DMS上查询线上数据库数据,今天也是平常的一次操作 集合 ...
- MMDetection 快速开始,训练自定义数据集
本文将快速引导使用 MMDetection ,记录了实践中需注意的一些问题. 环境准备 基础环境 Nvidia 显卡的主机 Ubuntu 18.04 系统安装,可见 制作 USB 启动盘,及系统安装 ...
- 计算机考研真题 ZOJ问题
题目描述 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. zoj能AC: 2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或 ...
- pip不是内部或外部命令解决方法
问题 已经配置好Python环境,但是安装依赖时,出现pip不是内部或外部命令. 解决方法 找到pip.exe文件所在的目录,将所在路径配置到环境变量path中. 再次输入pip
- MyBatis初级实战之二:增删改查
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 【Python】PDF转WORD
注意,下文中的PDF文档是纯文字格式,而且非扫描版的PDF文件. 如果是扫描版或者带有图片的.可能转起来会出现排版异常并且图片无法保存到.doc文件中. 正文开始: 需要安装依赖包 pdfminer3 ...