题意

略

题解

求路径上的割点。

然后就直接圆方树上差分

CODE

#include <bits/stdc++.h>
using namespace std;
inline void rd(int &x) {
char ch; for(;!isdigit(ch=getchar()););
for(x=ch-'0';isdigit(ch=getchar());)x=x*10+ch-'0';
}
const int MAXN = 100005;
const int MAXM = 200005;
int n, m, q; int fir[MAXN], to[MAXM<<1], nxt[MAXM<<1], cnt = 1;
inline void link(int u, int v) {
to[++cnt] = v; nxt[cnt] = fir[u]; fir[u] = cnt;
to[++cnt] = u; nxt[cnt] = fir[v]; fir[v] = cnt;
} int dfn[MAXN], low[MAXN], tmr, stk[MAXN], top, tot; vector<int>G[MAXN<<1]; void tarjan(int u, int ff) {
stk[++top] = u;
low[u] = dfn[u] = ++tmr;
for(int i = fir[u], v; i; i = nxt[i])
if((i^1) != ff) {
if(!dfn[v=to[i]]) {
tarjan(v, i);
low[u] = min(low[u], low[v]);
if(low[v] >= dfn[u]) {
++tot;
do G[tot].push_back(stk[top]), G[stk[top]].push_back(tot);
while(stk[top--] != v);
G[tot].push_back(u), G[u].push_back(tot);
}
}
else low[u] = min(low[u], dfn[v]);
}
}
int dep[MAXN<<1], sz[MAXN<<1], tp[MAXN<<1], son[MAXN<<1], fa[MAXN<<1];
void dfs1(int u, int ff) {
dep[u] = dep[fa[u]=ff] + (sz[u] = 1);
for(int i = G[u].size()-1, v; i >= 0; --i)
if((v=G[u][i]) != ff) {
dfs1(v, u), sz[u] += sz[v];
if(sz[v] > sz[son[u]]) son[u] = v;
}
}
void dfs2(int u, int Tp) {
tp[u] = Tp;
if(son[u]) dfs2(son[u], Tp);
for(int i = G[u].size()-1, v; i >= 0; --i)
if((v=G[u][i]) != fa[u] && v != son[u])
dfs2(v, v);
}
inline int lca(int u, int v) {
while(tp[u] != tp[v]) {
if(dep[tp[u]] > dep[tp[v]]) u = fa[tp[u]];
else v = fa[tp[v]];
}
return dep[u] < dep[v] ? u : v;
}
int f[MAXN<<1];
bool vis[MAXN<<1];
int dfs(int u) {
if(vis[u]) return f[u]; vis[u] = 1;
for(int i = G[u].size()-1, v; i >= 0; --i)
if((v=G[u][i]) != fa[u])
f[u] += dfs(v);
return f[u];
}
int main() {
rd(n), rd(m), rd(q); tot = n;
for(int i = 1, u, v; i <= m; ++i) rd(u), rd(v), link(u, v);
for(int i = 1; i <= n; ++i) if(!dfn[i]) tarjan(i, 0), --top;
dfs1(1, 0), dfs2(1, 1);
for(int i = 1, u, v, Lca; i <= q; ++i) {
rd(u), rd(v);
Lca = lca(u, v);
++f[u], ++f[v], --f[Lca], --f[fa[Lca]];
}
for(int i = 1; i <= n; ++i) printf("%d\n", dfs(i));
}

附上圆方树学习链接:

租酥雨的博客

YoungNeal的博客

BZOJ3331 压力 (圆方树+树上差分)的更多相关文章

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

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

  2. bzoj3331 压力(圆方树)

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

  3. 【题解】Uoj#30 Tourist(广义圆方树+树上全家桶)

    [题解]Uoj#30 Tourist(广义圆方树+树上全家桶) 名字听起来很霸气其实算法很简单.... 仙人掌上的普通圆方树是普及题,但是广义圆方树虽然很直观但是有很多地方值得深思 说一下算法的流程: ...

  4. BZOJ 压力 tarjan 点双联通分量+树上差分+圆方树

    题意 如今,路由器和交换机构建起了互联网的骨架.处在互联网的骨干位置的核心路由器典型的要处理100Gbit/s的网络流量. 他们每天都生活在巨大的压力之下.小强建立了一个模型.这世界上有N个网络设备, ...

  5. Codechef Sad Pairs——圆方树+虚树+树上差分

    SADPAIRS 删点不连通,点双,圆方树 非割点:没有影响 割点:子树DP一下 有不同颜色,所以建立虚树 在圆方树上dfs时候 如果当前点是割点 1.统计当前颜色虚树上的不连通点对,树形DP即可 2 ...

  6. 仙人掌 && 圆方树 && 虚树 总结

    仙人掌 && 圆方树 && 虚树 总结 Part1 仙人掌 定义 仙人掌是满足以下两个限制的图: 图完全联通. 不存在一条边处在两个环中. 其中第二个限制让仙人掌的题做 ...

  7. Note -「圆方树」学习笔记

    目录 圆方树的定义 圆方树的构造 实现 细节 圆方树的运用 「BZOJ 3331」压力 「洛谷 P4320」道路相遇 「APIO 2018」「洛谷 P4630」铁人两项 「CF 487E」Touris ...

  8. 仙人掌&圆方树

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

  9. 圆方树简介(UOJ30:CF Round #278 Tourists)

    我写这篇博客的原因 证明我也是学过圆方树的 顺便存存代码 前置技能 双联通分量:点双 然后就没辣 圆方树 建立 新建一个图 定义原图中的所有点为圆点 对于每个点双联通分量(只有两个点的也算) 建立一个 ...

随机推荐

  1. 基于DNN的推荐算法总结

    1.早期的算法 深度学习在CTR预估应用的常见算法有Wide&Deep,DeepFM等. 这些方法一般的思路是:通过Embedding层,将高维离散特征转换为固定长度的连续特征,然后通过多个全 ...

  2. u盘传输文件时提示过大

    (无需格式化U盘) 1.拷贝大文件时提示目标文件系统过大,无法复制 2.查U盘,发现剩余空间足够: 3.分析原因,是由于U盘的格式问题导致的,当期的磁盘格式是FAT32类型的,无拷贝过大的文件: 4. ...

  3. java通过jasper文件生成jpg图片

    iReport资料紧俏,整理好就赶紧传上来: 工具类:JpgExport public class JpgExportUtil { public static String Export(Map< ...

  4. python — 线程

    目录 1.线程基础知识 2 Thread 类 3 锁 4 队列 1.线程基础知识 1.1 进程与线程的区别 进程: 创建进程 时间开销大 销毁进程 时间开销大 进程之间切换 时间开销大 线程: 线程是 ...

  5. Linux的常用命令及快捷键

    常用快捷键 1 终端中的快捷键 ctrl+a 回到行首,ctrl+e回到行尾 ctrl+n 代码候选 常用命令

  6. PowerBuilder学习笔记之2PowerScript语言(二)

    z教材地址:https://wenku.baidu.com/view/1e82d26925c52cc58ad6be05.html?sxts=1565679996440 2.4数组 声明数组:Integ ...

  7. ubuntu下使用eclipse调试jni无法获取环境变量,本地库(java.library.path,LD_LIBRARY_PATH)等问题的解决。

    首先要把本地库全部配置到LD_LIBRARY_PATH中. 然后一定要采用命令行方式启动eclipse(也可以写一个启动shell,通过桌面启动器打开这个shell),这样环境变量才会有效. 打开终端 ...

  8. 使用httpwebrequest发送http请求

    HttpWebRequest request = WebRequest.Create("url") as HttpWebRequest; request.Timeout = * * ...

  9. HTTP协议的详解

    [HTTP协议的详解] Ø 请求部分 * 请求行 * 提交方式: * 提交方式有很多,常用的GET和POST: * GET和POST的区别: * GET的提交的参数会显示到地址栏上,而POST不显示. ...

  10. 等保测评中与oracle有关的工作

    等保2.0包含硬件.存储.中间件.数据库各方面的安全规范,现把与Oracle数据库有关的内容整理如下,供参考: 一.安全计算环境 1.身份鉴别: a,应对登陆的用户进行身份标识和鉴别,身份标识具有唯一 ...