#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; typedef long long ll;
const int maxn = 1e5 + ;
const int maxm = 5e5 + ;
int dfn[maxn], low[maxn], head[maxn];
ll ans[maxn], siz[maxn];
int n, m, tot, num, root;
bool cut[maxn];
struct edge{
int to, next;
} ed[*maxm];
inline void init(){
memset( head, -, sizeof(head) );
memset( dfn, , sizeof(dfn) );
memset( cut, false, sizeof(cut) );
memset( ans, , sizeof(ans) );
num = ;
tot = ;
} inline int min( int a, int b ){
return a<b ? a:b;
} inline void add( int u, int v ){
tot ++;
ed[tot].to = v;
ed[tot].next = head[u];
head[u] = tot;
} inline void tarjan( int u ){
dfn[u] = low[u] = ++num;
siz[u] = ;
int flag = , sum = ;
for( int i=head[u]; i!=-; i=ed[i].next ){
int v = ed[i].to;
if( !dfn[v] ){
tarjan(v);
siz[u] += siz[v];      //计算子树的点个数
low[u] = min(low[u], low[v]);
if( dfn[u]<=low[v] ){
flag ++;
ans[u] += (ll)siz[v]*(n-siz[v]);    //if(cut[i]) ans = (i的子树, 除该子树的其他部分)的点对和
sum += siz[v];
if( u!=root || flag> ) cut[u] = true;
}
}else low[u] = min(low[u], dfn[v]);
}
if( cut[u] ) ans[u] += (ll)(n-sum-)*(sum+) + (n-);  //如果去掉的点i是割点ans继续累加上(其他部分,i和i的子树)点对 + (i, 除i的其他部分)点对
else ans[u] = *(n-);              //if(!cut[i]) ans = 2*(n-1)
} int main(){
scanf("%d%d", &n, &m);
init();
for( int i=; i<m; i++ ){
int u, v;
scanf("%d%d", &u, &v);
add( u, v );
add( v, u );
}
root = ;
tarjan();
for( int i=; i<=n; i++ )
printf("%lld\n", ans[i]); return ;
}
/*Sample Input
5 5
1 2
2 3
1 3
3 4
4 5
Sample Output
8
8
16
14
8
*/

BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)的更多相关文章

  1. poj 3694双联通缩点+LCA

    题意:给你一个无向连通图,每次加一条边后,问图中桥的数目. 思路:先将图进行双联通缩点,则缩点后图的边就是桥,然后dfs记录节点深度,给出(u,v)使其节点深度先降到同一等级,然后同时降等级直到汇合到 ...

  2. hdu 4612 双联通缩点+树形dp

    #pragma comment(linker,"/STACK:102400000,102400000")//总是爆栈加上这个就么么哒了 #include<stdio.h> ...

  3. BZOJ1123: [POI2008]BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 614  Solved: 235[Submit][Status] ...

  4. Codeforces 1000 组合数可行线段倒dp 边双联通缩点求树直径

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std ...

  5. BZOJ1123:[POI2008]BLO(双连通分量)

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...

  6. bzoj1123 [POI2008]BLO——求割点子树相乘

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 思路倒是有的,不就是个乘法原理吗,可是不会写...代码能力... 写了一堆麻麻烦烦乱七 ...

  7. [BZOJ1123]:[POI2008]BLO(塔尖)

    题目传送门 题目描述 Byteotia城市有n个towns.m条双向roads.每条road连接两个不同的towns,没有重复的road.所有towns连通. 输入格式 输入n,m及m条边. 输出格式 ...

  8. 【dfs+连通分量】Bzoj1123 POI2008 BLO

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...

  9. 边的双联通+缩点+LCA(HDU3686)

    Traffic Real Time Query System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

随机推荐

  1. Swift编码总结9

    1.Swift限制textField输入位数为10位: func textField(_ textField: UITextField, shouldChangeCharactersIn range: ...

  2. UE4 常用数学

    转自:https://dawnarc.com/2016/07/mathlinear-algebra%E5%90%91%E9%87%8F%E7%A7%AF%E5%A4%96%E7%A7%AF%E5%8F ...

  3. 理解 Node.js 的 GC 机制

    <深入浅出Node.js>第五章<内存控制>阅读笔记 随着 Node 的发展,JavaScript 的应用场景早已不再局限在浏览器中.本文不讨论网页应用.命令行工具等短时间执行 ...

  4. [Docker] - 使用 Kitematic 安装 elasticsearch 失败 之解决

    环境:Docker v19.03.4 + Kitematic Issue:(HTTP code 404) no such image - no such image: elasticsearch:la ...

  5. 测试类——python编程从入门到实践

    1.各种断言方法 常用断言方法: 方法 用途 assertEqual(a, b) 核实a == b assertNotEqual(a, b) 核实a != b assertTrue(x) 核实x为Tr ...

  6. python requests 超时与重试

    一 源起: requests模块作为python爬虫方向的基础模块实际上在日常实际工作中也会涉及到,比如用requests向对方接口url发送POST请求进行推送数据,使用GET请求拉取数据. 但是这 ...

  7. 法那科 三菱 CNC虚拟机

    有虚拟机,就不用去线上 接线调机了,影响生产,还怕搞坏机子,很方便.

  8. javascript document.createElement() document.createTextNode() appendChild()

    //--------------document.createElement("div") var div = document.createElement("div&q ...

  9. Solved:Spring Junit Test NoSuchMethodError

    最近在看Spring in action这本书,在Ubuntu上配好了环境开始开发,没想到做了第二章的第一个例子就遇到了一个错误. 首先我在src/main/java文件夹下的controller包内 ...

  10. DS DI ES SI等等

    DS is called data segment register. It points to the segment of the data used by the running program ...