码量略大。

题意就是求路径必经点。

tarjan缩点,所有的非割点只有是起点终点时才必经,直接开个ans数组就OK了。

至于割点,因为缩完点之后的图是vDcc和割点共同组成的,而且题目说连通,那就是棵树,直接树上差分,最后统计信息,输出时输出割点的val即可。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
int read(){
int sum=,f=;char x=getchar();
while(x<''||x>''){
if(x=='-') f=-;
x=getchar();
}while(x>=''&&x<=''){
sum=sum*+x-'';
x=getchar();
}return sum*f;
}
struct EDGE{
int ed,nex;
}edge[],edgec[];
int num,numc,first[],firstc[];
int n,m,ques,nvcn;
int dfn[],low[],sta[],bl[],new_id[];
int ord,vccnum,top,ans[],val[],d[];
int f[][];
vector<int>vcc[];
bool cut[],v[];
void add(int st,int ed){
// cout<<"st="<<st<<" ed="<<ed<<endl;
edge[++num].ed=ed;
edge[num].nex=first[st];
first[st]=num;
}
void addc(int st,int ed){
// cout<<"stc="<<st<<" edc="<<ed<<endl;
edgec[++numc].ed=ed;
edgec[numc].nex=firstc[st];
firstc[st]=numc;
}
void tarjan(int x){
dfn[x]=low[x]=++ord;
sta[++top]=x;
int child=;
for(int i=first[x];i;i=edge[i].nex){
int y=edge[i].ed;
if(!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x]){
child++;
if((x==&&child>=)||(x!=&&child>)) cut[x]=;
vcc[++vccnum].push_back(x);
int p;
do{
p=sta[top--];
vcc[vccnum].push_back(p);
}while(p!=y);
}
}else low[x]=min(low[x],dfn[y]);
}
}
void bfs(int st){
queue<int>q;
d[st]=;
q.push(st);
while(!q.empty()){
int x=q.front();q.pop();
for(int i=firstc[x];i;i=edgec[i].nex){
int y=edgec[i].ed;
if(d[y]) continue;
d[y]=d[x]+;
f[y][]=x;
q.push(y);
for(int j=;j<=;j++)
f[y][j]=f[f[y][j-]][j-];
}
}
}
int lca(int x,int y){
if(d[x]>d[y]) swap(x,y);
for(int i=;i>=;i--)
if(d[f[y][i]]>=d[x])
y=f[y][i];
if(x==y) return x;
for(int i=;i>=;i--)
if(f[x][i]!=f[y][i]){
x=f[x][i];
y=f[y][i];
}
return f[x][];
}
void dfs(int x){
v[x]=;
for(int i=firstc[x];i;i=edgec[i].nex){
int y=edgec[i].ed;
if(v[y]) continue;
dfs(y);
val[x]+=val[y];
}
}
int main(){
// freopen("b.in","r",stdin);
// freopen("b1.in","r",stdin);
n=read();m=read();ques=read();
for(int i=,x,y;i<=m;i++){
x=read();y=read();
add(x,y);add(y,x);
}
tarjan();
nvcn=vccnum;
for(int i=;i<=n;i++)
if(cut[i]) new_id[i]=++nvcn;
for(int i=;i<=vccnum;i++)
for(int j=;j<vcc[i].size();j++){
int x=vcc[i][j];
if(cut[x]){
addc(new_id[x],i);
addc(i,new_id[x]);
}else bl[x]=i;
}
bfs();
for(int i=,a,b;i<=ques;i++){
a=read();b=read();
ans[a]++;ans[b]++;
if(cut[a]) a=new_id[a];
else a=bl[a];
if(cut[b]) b=new_id[b];
else b=bl[b];
int LCA=lca(a,b);
val[a]++;val[b]++;val[LCA]--;val[f[LCA][]]--;
}
dfs();
for(int i=;i<=n;i++){
if(cut[i])
printf("%d\n",val[new_id[i]]);
else printf("%d\n",ans[i]);
}return ;
}

BZOJ3331压力的更多相关文章

  1. bzoj3331 压力(圆方树)

    题目链接 圆方树 圆方树就是对于联通无向图中的每一个点双新建一个方点,与点双中的每个点连一条边,然后将原来的边删去.将原来的点看作圆点,新建的点看作方点.所以叫做圆方树. 性质 1.圆方树肯定是棵树( ...

  2. BZOJ3331 压力 (圆方树+树上差分)

    题意 略 题解 求路径上的割点. 然后就直接圆方树上差分 CODE #include <bits/stdc++.h> using namespace std; inline void rd ...

  3. 仙人掌&圆方树

    仙人掌&圆方树 Tags:图论 [x] [luogu4320]道路相遇 https://www.luogu.org/problemnew/show/P4320 [ ] [SDOI2018]战略 ...

  4. 【BZOJ3331】[BeiJing2013]压力 Tarjan求点双

    [BZOJ3331][BeiJing2013]压力 Description 如今,路由器和交换机构建起了互联网的骨架.处在互联网的骨干位置的核心路由器典型的要处理100Gbit/s的网络流量.他们每天 ...

  5. BZOJ3331: [BeiJing2013]压力

    传送门 Tarjan的三大应用之一:求解点双联通分量. 求解点双联通分量.然后缩点,差分优化即可. //BZOJ 3331 //by Cydiater //2016.10.29 #include &l ...

  6. BZOJ3331 [BeiJing2013]压力[圆方树+树上差分]

    圆方树新技能get.具体笔记见图连通性问题学习笔记. 这题求无向图的必经点,这个是一个固定套路:首先,一张连通的无向图中,每对点双和点双之间是以一个且仅一个割点连接起来的(如果超过一个就不能是割点了) ...

  7. BZOJ3331 BZOJ2013 压力

    考前挣扎 圆方树这么早就出现了嘛... 要求每个点必须被经过的次数 所以就是路径上的割点/端点++ 由于圆方树上所有非叶子圆点都是割点 所以就是树上差分就可以辣. 实现的时候出了一点小问题. 就是这里 ...

  8. 使用SwingBench 对Oracle RAC DB性能 压力测试

    我们可以使用swingbench这个工具对数据库性能进行压力测试,得到一些性能指标作为参考. SwingBench下载: http://www.dominicgiles.com/downloads.h ...

  9. [原]一个针对LVS的压力测试报告

    LVS 测试报告 测试计划 基本功能测试 流量压力测试 响应时间测试 配置正确性测试 灾难恢复测试 测试点 基本功能测试 客户端IP地址正确性 RealServer 访问Internet测试(包括Ip ...

随机推荐

  1. c# 多线程使用队列顺序写日志的类 (需要再优化)

    using System; using System.Collections.Generic; using System.Threading; public class LogManager { // ...

  2. 解决windows系统下ping,ipconfig不是内部或外部命令

    一般情况下,都是误删了系统变量path的值.解决方法:右击我的电脑 → 选择属性 → 选择高级系统设置 → 环境变量 → 在系统变量列表中,找到“path”环境变量双击,打开.在变量值这一栏检测下是否 ...

  3. 基于APR模式的Tomcat8环境部署

    1.版本信息 组件名 版本号 jdk 1.8.111 tomcat 8.5.9 apr 1.6.3 apr-iconv 1.2.2 apr-util 1.6.2 tomcat-native 1.2.1 ...

  4. MVC4学习要点记二

    一.分页(PagedList.MVC)1.安装PagedList.MVCPM>install-package PagedList.mvc   2.控制器中使用PagedList   3.csht ...

  5. luogu题解 UVA11992 【Fast Matrix Operations】

    题目链接: https://www.luogu.org/problemnew/show/UVA11992 题目大意: 一个r*c的矩阵,一开始元素都是0,然后给你m次三种操作,分别是将一个子矩阵中所有 ...

  6. Shiro学习笔记总结,附加" 身份认证 "源码案例(一)

    Shiro学习笔记总结 内容介绍: 一.Shiro介绍 二.subject认证主体 三.身份认证流程 四.Realm & JDBC reaml介绍 五.Shiro.ini配置介绍 六.源码案例 ...

  7. VMwarevSphere Client 链接 vCenter Server中的主机,开启虚拟机提示:在主机当前连接状况下不允许执行该操作

    VMwarevSphere Client 链接 vCenter Server中的主机,开启虚拟机提示:在主机当前连接状况下不允许执行该操作很多原因都可以导致该问题出现,例如 vCenter Serve ...

  8. 7.Netty中 handler 的执行顺序

    1.Netty中handler的执行顺序 Handler在Netty中,无疑占据着非常重要的地位.Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码.拦截 ...

  9. C++归并排序(数组&链表)

    1.归并排序(Merge Sort) 归并排序的性能不受输入数据的影响,始终都是O(n log n)的时间复杂度.代价是需要额外的内存空间. 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采 ...

  10. Centos下编译安装nginx

    1.安装依赖 yum install -y pcre-devel zlib-devel gcc openssl-devel gd-devel 2.下载安装包 不同版本的nginx下载地址:http:/ ...