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的更多相关文章

随机推荐

  1. CentOS 8 安装Nginx

    安装命令: dnf install nginx -y 这就安装完成了 ,对你没看错一个命令就已经把nginx安装好了,不信你通过 nginx -V 命令查看. 常用操作: 1.nginx配置文件目录 ...

  2. 什么是Cassandra数据库

    在本文中,我们将介绍Cassandra名字的含义.Cassandra的发展简史.Cassandra这项技术的特点及优势,以及对于这项技术的未来展望. 本文将用浅显易懂的方式,帮助您将对Cassandr ...

  3. svg基础--基本语法与标签

    svg系列–基础 这里会总结svg的基础知识和一些经典的案例. svg简介 SVG(Scalable Vector Graphics)is an XML-based Language for crea ...

  4. 通过关闭线程底层资源关闭类似synchronized及IO阻塞的情况

    public class IoBlocked implements Runnable { private InputStream in; public IoBlocked(InputStream in ...

  5. Sentry(v20.12.1) K8S 云原生架构探索,玩转前/后端监控与事件日志大数据分析,高性能+高可用+可扩展+可伸缩集群部署

    Sentry 算是目前开源界集错误监控,日志打点上报,事件数据实时分析最好用的软件了,没有之一.将它部署到 Kubernetes,再搭配它本身自带的利用 Clickhouse (大数据实时分析引擎)构 ...

  6. (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇

    本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的新系列教程Python+Dash快 ...

  7. gin框架的路由源码解析

    前言 本文转载至 https://www.liwenzhou.com/posts/Go/read_gin_sourcecode/ 可以直接去原文看, 比我这里直观 我这里只是略微的修改 正文 gin的 ...

  8. 【Tomcat 源码系列】认识 Tomcat

    一,前言 说一句大实话,"平时一直在用 Tomcat,但是我从来没有用过 Tomcat". "平时一直在用 Tomcat",是因为搬砖用的 SpringBoot ...

  9. 【Redis】Redis基础 - Redis安装启动测试

    Redis基本 - 安装 文章目录 Redis基本 - 安装 Linux下安装Redis Docker 方式 Github 源码编译方式 直接安装方式 Windows下Redis安装 记录 - Red ...

  10. 【数据库】MySQL & SQL 介绍

    文章目录 MySQL & SQL 介绍 1.MySQL的背景 2.MySQL的优点 3.MySQL的安装 4.MySQL服务的启动和停止 方式一 方式二 5.MySQL服务的登录和退出 方式一 ...