BLO(bzoj1123)
Description
Byteotia城市有n个 towns, m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。
Input
输入n和m。( n<=100000 ,m<=500000 )
Output
输出n个数,其中第i个整数表示把与节点i关联的所有边去掉之后(不去掉节点i本身),无向图中有多少个有序点对(x,y),满足x和y不连通。
Sample Input
5 5
1 2
2 3
1 3
3 4
4 5
Sample Output
8
8
16
14
8
限制与约定
时间限制:1s
空间限制:128MB
std:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#define LL long long
using namespace std;
const int maxn=1e5+;
const int maxm=5e5+;
inline int read()
{
int a=;bool b=;char x=getchar();
while(x<''||''<x){
if(x=='-')b=;
x=getchar();
}
while(''<=x&&x<=''){
a=(a<<)+(a<<)+x-'';
x=getchar();
}
return b?a:-a;
}
int first[maxn],next[maxm*],to[maxm*],edge_count;
inline void add(int x,int y){
edge_count++;
to[edge_count]=y;
next[edge_count]=first[x];
first[x]=edge_count;
}
int pre[maxn],low[maxn],root,Time;
LL ans[maxn],size[maxn];
int n,m;
void tarjan(int u){
pre[u]=low[u]=++Time;
size[u]=; int temp=;
long long cnt=n-;
for(int i=first[u];i;i=next[i]){
int v=to[i];
if(pre[v]){
low[u]=min(low[u],pre[v]);
}
else{
tarjan(v);
low[u]=min(low[u],low[v]);
size[u]+=size[v]; if(pre[u]<=low[v]){
temp++;
if(u!=root || temp>){
ans[u]+=size[v]*(n-size[v]-);
cnt-=size[v];
}
}
}
}
ans[u]+=cnt*(n-cnt-);
}
int main()
{
n=read();m=read();
const LL N=n+n-;
for(int i=,x,y;i<=m;i++){
x=read();y=read();
add(x,y);add(y,x);
}
for(int i=;i<=n;i++){
if(pre[i])continue;
root=i;
tarjan(i);
}
for(int i=;i<=n;i++){
printf("%lld\n",ans[i]+N);
}
return ;
}
奇葩问题汇总{
1.数据范围为>maxint,故要开long long
2.其中不影响结果的变量cnt如果开int也会影响结果,
因为每一步都要考虑强制转换的问题!!!特别要注意,否则会傻逼!!!
3.因为是双向点对,所以不用复杂的记录当前已经分理出多少点->res[u]
直接乘就行还会变快,!!!而且类似的求单向点对也可以求完双向再/2即可,
排列组合很重要!!!
}
BLO(bzoj1123)的更多相关文章
- 【BZOJ1123】 [POI2008]BLO (tarjan)
tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好. ; maxm=; type edgetype=record toward,next:l ...
- [BZOJ1123]:[POI2008]BLO(塔尖)
题目传送门 题目描述 Byteotia城市有n个towns.m条双向roads.每条road连接两个不同的towns,没有重复的road.所有towns连通. 输入格式 输入n,m及m条边. 输出格式 ...
- [POI2008]BLO(Tarjan)
[POI2008]BLO Description Byteotia城市有\(n\)个 towns \(m\)条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所 ...
- NLPIR(ICTCLAS)分析包的使用记录
前段时间使用了HanLP一个纯JAVA分词工具包,后来老大说分词效果不是很好,需要换一个分词工具.于是推荐了一个分词工具——NLPIR,它是中科院XXX研发的一个分词工具.这个分词工具只用C/C++写 ...
- Android开源框架:Universal-Image-Loader解析(一)
之前花了一些时间,好好看了下这个框架,于是决定再重新梳理一下,把整个处理方法和流程过一遍,俗话说:温故而知新嘛 关于Universal-Image-Loader此框架的各种优点,稍微介绍下,网上应该也 ...
- Android开发环境搭建相关文章列表(转载)
Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1.0是2008年发布的,截止到目前为止Android已经更新Android5.0.1, ...
- 转:AM335x启动流程(BootRom->MLO->Uboot)
http://blog.chinaunix.net/uid-28458801-id-3486399.html 参考文件: 1,AM335x ARM Cortex-A8 Microprocessors ...
- rtems在mini2440上的移植(ubuntu)
第一步 建立编译环境,rtems的编译环境需要使用newlib的库,所以ubuntu自带的gcc是不可以的,我是参照下面的博客才编译成功的,之前走了好多弯路. http://blog.sina.com ...
- Linux内核异常处理体系结构详解(一)【转】
转自:http://www.techbulo.com/1841.html 2015年11月30日 ⁄ 基础知识 ⁄ 共 6653字 ⁄ 字号 小 中 大 ⁄ Linux内核异常处理体系结构详解(一)已 ...
随机推荐
- Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)B. Personalized Cup
题意:把一长串字符串 排成矩形形式 使得行最小 同时每行不能相差大于等于两个字符 每行也不能大于20个字符 思路: 因为使得行最小 直接行从小到大枚举即可 每行不能相差大于等于两个字符相当于 ...
- MT【323】向量模的范围
已知单位向量 $\overrightarrow e_1,\overrightarrow e_2$ 的夹角为 $120^\circ$,$\left|x\overrightarrow e_1+y\over ...
- Inheritance: 'A' is an inaccessible base of 'B'
'boost::enable_shared_from_this<net::Session>' is an inaccessible base of 'net::Session' BOOST ...
- (二叉树 递归) leetcode 889. Construct Binary Tree from Preorder and Postorder Traversal
Return any binary tree that matches the given preorder and postorder traversals. Values in the trave ...
- J.U.C-volatile
禁止指令重排
- echo 输入背景和字体常用方法
ECHO输出背景颜色以及文字颜色输出格式: echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"例如: echo -e & ...
- requests 获取token
# encoding:utf-8 import reimport jsonimport randomfrom requests.sessions import Session class Regist ...
- Node的express配置使用ejs模板
注册ejs模板为html页.以.ejs为后缀的模板页,现在的后缀名可以是.html app.engine('.html', require('ejs').__express); 设置视图模板的默认后缀 ...
- rsync + sersync 实现实时数据同步
一.环境: 主机1:youzhuan-bak centos 7.2 主机2:youzhuan-online centos 7.2 二.部署过程: youzhuan-bak : [root@ ...
- 【模板】最长公共子序列(LCS)。
看过好多人的博客,感觉要么是太复杂要么就是太不容易理解. 那就亲自动手写一个通俗易懂的. 先定义两个数组,第一个数组为主,用第二个数组来匹配第一个,看能有多少可以对应上的. 所以,其实第一个数组的内容 ...