思路

这个题哪里有那么费脑筋

我们可以树链剖分嘛LCT昨天学的时候睡着了,不是太会

两遍dfs+一个5行的BIT

其实树链剖分学好了对倍增和LCT理解上都有好处

一条路径上的修改

由于一条剖出来的链是连续的,我们要选择数据结构维护

不过这里不用维护太多东西,只是区间+1

我们可以选择常数小,好写的树状数组(从50行的线段树变成5行的

BIT)

而且使得\(O(nlog_{2})\)的算法跑的并不慢

具体就是用差分思想,修改区间[L,R]时

$[1,R] +1 $ \([1,L-1] -1\)达到修改的目的

最后查询时

直接每次查询[1,i]的值就可得到i的最终压力值

代码

#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int maxn=2e5+7;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
vector<int> G[maxn];
int n,m,top[maxn],f[maxn],siz[maxn],idx[maxn],cnt,son[maxn],dep[maxn];
void dfs1(int u,int fa) {
f[u]=fa;
siz[u]=1;
dep[u]=dep[fa]+1;
for(vector<int>::iterator it=G[u].begin();it!=G[u].end();++it) {
if(*it==fa) continue;
dfs1(*it,u);
siz[u]+=siz[*it];
if(siz[son[u]] < siz[*it]) son[u]=*it;
}
}
void dfs2(int u,int topf) {
idx[u]=++cnt;
top[u]=topf;
if(!son[u]) return;
dfs2(son[u],topf);
for(std::vector<int>::iterator it=G[u].begin();it!=G[u].end();++it)
if(!idx[*it]) dfs2(*it,*it);
}
namespace BIT {
int sum[maxn];
int lowbit(int x) {return x&-x;}
void add(int x,int k) {for(int i=x;i<=n;i+=lowbit(i)) sum[i]+=k;}
int query(int x) {int ans=0;for(int i=x;i>=1;i-=lowbit(i)) ans+=sum[i];return ans;}
void modify(int x,int y) {if(x!=n)add(y+1,-1);add(x,1);}
}
void change(int x,int y) {
while(top[x]!=top[y]) {
if(dep[top[x]] < dep[top[y]]) swap(x,y);
BIT::modify(idx[top[x]],idx[x]);
x=f[top[x]];
}
if(dep[x] > dep[y]) swap(x,y);
BIT::modify(idx[x],idx[y]);
}
int main() {
n=read(),m=read();
FOR(i,2,n) {
int x=read(),y=read();
G[x].push_back(y),G[y].push_back(x);
}
dfs1(1,0);dfs2(1,1);
FOR(i,1,m) change(read(),read());
int ans=0;
FOR(i,1,n) ans=max(ans,BIT::query(i));
cout<<ans<<"\n";
return 0;
}

P3128 [USACO15DEC]最大流Max Flow的更多相关文章

  1. 洛谷P3128 [USACO15DEC]最大流Max Flow

    P3128 [USACO15DEC]最大流Max Flow 题目描述 Farmer John has installed a new system of N-1N−1 pipes to transpo ...

  2. P3128 [USACO15DEC]最大流Max Flow(LCA+树上差分)

    P3128 [USACO15DEC]最大流Max Flow 题目描述 Farmer John has installed a new system of  pipes to transport mil ...

  3. 洛谷P3128 [USACO15DEC]最大流Max Flow [树链剖分]

    题目描述 Farmer John has installed a new system of  pipes to transport milk between the  stalls in his b ...

  4. 【luogu P3128 [USACO15DEC]最大流Max Flow】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3128 菜 #include <cstdio> #include <cstring> ...

  5. 洛谷 P3128 [ USACO15DEC ] 最大流Max Flow —— 树上差分

    题目:https://www.luogu.org/problemnew/show/P3128 倍增求 lca 也写错了活该第一次惨WA. 代码如下: #include<iostream> ...

  6. 洛谷P3128 [USACO15DEC]最大流Max Flow [倍增LCA]

    题目描述 Farmer John has installed a new system of  pipes to transport milk between the  stalls in his b ...

  7. luogu P3128 [USACO15DEC]最大流Max Flow (树上差分)

    题目描述 Farmer John has installed a new system of N-1N−1 pipes to transport milk between the NN stalls ...

  8. 树上差分——点差分裸题 P3128 [USACO15DEC]最大流Max Flow

    讲解: https://rpdreamer.blog.luogu.org/ci-fen-and-shu-shang-ci-fen #include <bits/stdc++.h> #def ...

  9. 洛谷P3128 [USACO15DEC]最大流Max Flow(树上差分)

    题意 题目链接 Sol 树上差分模板题 发现自己傻傻的分不清边差分和点差分 边差分就是对边进行操作,我们在\(u, v\)除加上\(val\),同时在\(lca\)处减去\(2 * val\) 点差分 ...

随机推荐

  1. IT新起之秀

    辞职以后自己比较迷茫,不知道自己能干什么,09年毕业到现在虽然工作经验有7.8年,但是感觉自己什么都不会,除了自己能下车间别的好像也做不成,没有一技之长.我更像是一个经验用了7.8年而不是有7.8年的 ...

  2. pdf转txt

    ubuntu pdf转jpg或txt chenlei posted @ 2009年12月30日 17:22 inLinux , 1818 阅读 呵呵,刚刚在网上定购了一款mp5,后来才发现它不支持PD ...

  3. html5-基本知识小结及补充

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  4. jQuery选择器--:eq(index)、:lt(index)和:gt(index)

       :eq(index) 概述 匹配一个给定索引值的元素 参数 index  从 0 开始计数    :gt(index) 概述 匹配所有大于给定索引值的元素 参数 index  从 0 开始计数 ...

  5. uva 12222 Mountain Road

    题意: 有一个单行道,两个方向都有车在等待.给出每个车的方向以及到达的时间以及走完这段路所需要的时间. 为了防止车祸,同向两车通过任一点的时间间隔不得小于10s. 求最后一辆车离开时刻的最小值. 思路 ...

  6. .py文件 改成默认用idle打开

    A.右键.py文件,edit with idle ==================================B.如果没有这个选项: 选择打开方式,进入python安装路径,选择 Python ...

  7. Docker相关知识整理

    一.进入和退出docker容器 使用docker ps查看容器id docker exec -it containerId /bin/bash //进入容器 Ctrl + P + Q //退出容器 二 ...

  8. Javaweb笔记—03(BS及分页的业务流程)

    DAO部分:中间层声明该有的变量 pagerBook pageData sumRow sumPage求出总的记录数id唯一标识:select count(id) as rowsum from book ...

  9. javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception

    type Exception report message Servlet.init() for servlet springmvc threw exception description The s ...

  10. crontab命令的使用方法

    crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...