割点

首先 tarjan 求割点,

对于不是割点的点, 答案是 2 * (n-1) 有序,所以要乘 2

对于是割点的点, 答案是删去该点后所有连通块的个数加上 n-1 在乘 2

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
const int MAXN = 1000005;
ll ans[MAXN];
int head[MAXN], n, m, nume, dfn[MAXN], low[MAXN], ind, siz[MAXN];
bool f[MAXN];
struct edge{
int to, nxt;
}e[MAXN];
void adde(int from, int to) {
e[++nume].to = to;
e[nume].nxt = head[from];
head[from] = nume;
}
int init() {
int rv = 0, fh = 1;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') fh = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
rv = (rv<<1) + (rv<<3) + c - '0';
c = getchar();
}
return fh * rv;
}
void tarjan(int u) {
dfn[u] = low[u] = ++ind;siz[u] = 1;
int flag = 0, sum = 0;
for(int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
if(!dfn[v]) {
tarjan(v);
siz[u] += siz[v];
low[u] = min(low[u], low[v]);
if(low[v] >= dfn[u]) {
flag++;
ans[u] += (ll) siz[v] * (n - siz[v]);
sum += siz[v];
if(u != 1 || flag > 1) {
f[u] = 1;
}
}
}else low[u] = min(low[u], dfn[v]);
}
if(f[u]) ans[u] += (ll) (n - sum - 1) * (sum + 1) + n - 1;
else ans[u] = 2 * n - 2;
}
int main() {
n = init(); m = init();
for(int i = 1; i <= m; i++) {
int u = init(), v = init();
if(u == v) continue;
adde(u, v); adde(v, u);
}
tarjan(1);
for(int i = 1; i <= n; i++) printf("%lld\n", ans[i]);
return 0;
}

最新文章

  1. iOS对象属性详解
  2. 檢查RAC狀態
  3. Ciel and Robot
  4. 做什么都要坚持,写blog也一样,
  5. C#静态构造函数和析构函数片段化认知
  6. 关于 Swift
  7. Trufun云端建模平台之云端UML工具发布
  8. asp.net Mvc 动态创建Controller
  9. 【jQuery插件】使用cropper实现简单的头像裁剪并上传
  10. Mac系统下XAMPP的简单使用
  11. jquery插件存档
  12. 通用Mapper的各个方法描述,参考官方
  13. [学习笔记]状压dp
  14. POJ 2296 Map Labeler (2-Sat)
  15. php 保存文件
  16. 使用URLConnection发送http请求实现简单爬虫(可以配置代理)
  17. java unsupported major.minor version 51.0 解决
  18. 安全测试之session,cookie
  19. 多校hdu5738 寻找
  20. linux下不用空格执行带参数的5种姿势

热门文章

  1. 微信小程序页面跳转绑定点击事件
  2. ceph 性能
  3. 转:maven国内镜像(maven下载慢的解决方法)
  4. 【JAVA】mac配置java环境变量
  5. nodejs源码—初始化
  6. JZOJ 4269. 【NOIP2015模拟10.27】挑竹签
  7. bootmem API总结
  8. 笔记-python-standard library-12.1 pickle
  9. GIt-恢复进度
  10. Python中__str__和__repr__的区别