Description

Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。

Input

输入n<=100000 m<=500000及m条边

Output

输出n个数,代表如果把第i个点去掉,将有多少对点不能互通。

题解:

一段巧妙的代码:

if(low[to[v]]>=pre[u]) {
answer[u]+=(ll)t*siz[to[v]];
t+=siz[to[v]];
}

 

考虑要实现每两个联通块之间分别乘一次,并加和.

用这种方式可以实现每两个联通块之间只乘一次.

Code:

#include<bits/stdc++.h>
#define setIO(s)freopen(s".in","r",stdin)
#define maxn 1100000
using namespace std;
int n;
#define ll long long
long long answer[maxn];
int cnt=0,scc=0;
int nex[maxn],to[maxn],head[maxn];
void add(int u,int v){ nex[++cnt]=head[u],head[u]=cnt,to[cnt]=v;}
int low[maxn],pre[maxn];
ll siz[maxn];
void dfs(int u,int fa){
low[u]=pre[u]=++scc;
siz[u]=1;
ll t=0;
for(int v=head[u];v;v=nex[v]){
if(to[v]==fa) continue;
if(pre[to[v]]) low[u]=min(low[u],pre[to[v]]);
else {
dfs(to[v],u);
siz[u]+=siz[to[v]];
if(low[to[v]]>=pre[u]) {
answer[u]+=(ll)t*siz[to[v]];
t+=siz[to[v]];
}
low[u]=min(low[u],low[to[v]]);
}
}
answer[u]+=(ll)((ll)n-t-1)*t;
}
int main()
{
//setIO("input");
int m;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v),add(v,u);
}
dfs(1,0);
for(int i=1;i<=n;i++) printf("%lld\n",(ll)(answer[i]+(ll)n-1)*2);
return 0;
}

  

BZOJ 1123: [POI2008]BLO 求割点_乘法原理_计数的更多相关文章

  1. BZOJ 1123: [POI2008]BLO

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

  2. BZOJ 1123: [POI2008]BLO( tarjan )

    tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------- ...

  3. bzoj 1123 [POI2008]BLO Tarjan求割点

    [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1540  Solved: 711[Submit][Status][Discu ...

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

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

  5. BZOJ 1123 [POI2008]BLO(Tarjan算法)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1123 [题目大意] Byteotia城市有n个towns,m条双向roads. 每条r ...

  6. bzoj 1123 [POI2008]BLO——点双连通分量

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 点双连通分量缩点,然后各种各样. 结果不会写了.比如新连边.记录一个点是割点缩成的点还 ...

  7. BZOJ1123: [POI2008]BLO

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

  8. BZOJ 1123 BLO

    tarjan求割点计算答案.注意不是每一棵子树都算答案.开个变量记一下. #include<iostream> #include<cstdio> #include<cst ...

  9. [POI2008]BLO(Tarjan)

    [POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...

随机推荐

  1. struts2中<jsp:forward>跳转时报404错误的问题

    index.jsp页面:     <jsp:forward page="show.action"></jsp:forward>      在struts.x ...

  2. C#关键字的个人理解与注释

    C#关键字注释:abstract:抽象as:类型转换(返回转换结果)base:基类bool:布尔类型break:条件中断语句byte:字节case:条件语句catch:异常捕获后执行char:16 位 ...

  3. elasticsearch 分析器阅读笔记(五)

    倒排索引 可以查看这里得分词原理https://www.cnblogs.com/LQBlog/articles/5743991.html 分析器 分析器处理过程的3步骤 1.字符过滤器:去除字符的特殊 ...

  4. 框架统一出参数DTO格式

    这个可以没必要定义. 每个接口返回自己的数据格式就好

  5. HDU 3934

    /*这是用的有旋转卡壳的思想. 首先确定i,j,对k进行循环,知道找到第一个k使得cross(i,j,k)>cross(i,j,k+1),如果k==i进入下一次循环. 对j,k进行旋转,每次循环 ...

  6. MySQL优化之——为用户开通mysql权限

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46627263 为用户开通mysql权限: grant all privileges ...

  7. hdu 1011 树型dp

    #include <cstdio> #include <iostream> #include <cstring> #include <vector> u ...

  8. leetcode || 50、Pow(x, n)

    problem: Implement pow(x, n). Hide Tags Math Binary Search 题意:求x的n次幂 thinking: (1)最简单想到的是直观上的数学幂函数求法 ...

  9. 解题报告 之 HDU5303 Delicious Apples

    解题报告 之 HDU5303 Delicious Apples Description There are n apple trees planted along a cyclic road, whi ...

  10. Java 异步转同步 ListenableFuture in Guava

    ListenableFuture的说明 并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写.出于这样的考虑,Guava 定义了 ListenableFuture接口并继承了JDK c ...