P3128 [USACO15DEC]最大流Max Flow (树上差分)
题目描述
Farmer John has installed a new system of N-1N−1 pipes to transport milk between the NN stalls in his barn (2 \leq N \leq 50,0002≤N≤50,000), conveniently numbered 1 \ldots N1…N. Each pipe connects a pair of stalls, and all stalls are connected to each-other via paths of pipes.
FJ is pumping milk between KK pairs of stalls (1 \leq K \leq 100,0001≤K≤100,000). For the iith such pair, you are told two stalls s_isi and t_iti, endpoints of a path along which milk is being pumped at a unit rate. FJ is concerned that some stalls might end up overwhelmed with all the milk being pumped through them, since a stall can serve as a waypoint along many of the KK paths along which milk is being pumped. Please help him determine the maximum amount of milk being pumped through any stall. If milk is being pumped along a path from s_isi to t_iti, then it counts as being pumped through the endpoint stalls s_isi and
t_iti, as well as through every stall along the path between them.
输入格式
The first line of the input contains NN and KK.
The next N-1N−1 lines each contain two integers xx and yy (x \ne yx≠y) describing a pipe
between stalls xx and yy.
The next KK lines each contain two integers ss and tt describing the endpoint
stalls of a path through which milk is being pumped.
输出格式
An integer specifying the maximum amount of milk pumped through any stall in the
barn.
输入输出样例
输入 #1
- 5 10
- 3 4
- 1 5
- 4 2
- 5 4
- 5 4
- 5 4
- 3 5
- 4 3
- 4 3
- 1 3
- 3 5
- 5 4
- 1 5
- 3 4
输出 #1
- 9
思路:
对于多次修改一个询问的树上统计问题 我们可以直接树上差分解决问题 任意两个点的路径都可以差分成 u->lca(u,v) lca(u,v)->v 差分可以分为点差分和边差分 唯一的区别在于对lca的操作不同 这题我们显然可以用点差分 每次修改都维护一个数组 最后dfs扫一遍统计答案即可。(这题卡掉了vector(可能是我写疵了 re wa mle都有。。) 用链式前向星就可以过)
性质(一个点的真实权值是一个点子树内所有差分后的权值之和)
- #include<bits/stdc++.h>
- using namespace std;
- const double pi = acos(-1.0);
- const int N = 5e4+7;
- const int inf = 0x3f3f3f3f;
- const double eps = 1e-6;
- typedef long long ll;
- const ll mod = 1e9+7;
- struct edge{
- int next,v;
- };
- edge e[N<<1];
- int head[N],cnt,f[N][30],d[N];
- int val[N];
- void add(int u,int v){
- e[++cnt]=(edge){head[u],v};
- head[u]=cnt;
- }
- int T;
- void dfs(int u,int fa){
- d[u]=d[fa]+1;
- for(int i=head[u];i;i=e[i].next){
- int v=e[i].v;
- if(v==fa) continue;
- f[v][0]=u;
- for(int j=1;j<=T;j++)
- f[v][j]=f[f[v][j-1]][j-1];
- dfs(v,u);
- }
- }
- int lca(int x,int y){
- if(d[x]>d[y]) swap(x,y);
- for(int i=T;i>=0;i--)
- if(d[f[y][i]]>=d[x]) y=f[y][i];
- if(x==y) return x;
- for(int i=T;i>=0;i--)
- if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
- return f[x][0];
- }
- int ans=-inf;
- void solve(int u,int fa){
- for(int i=head[u];i;i=e[i].next){
- int v=e[i].v;
- if(v==fa) continue;
- solve(v,u);
- val[u]+=val[v];
- }
- ans=max(ans,val[u]);
- }
- int main(){
- ios::sync_with_stdio(false);
- cin.tie(0); cout.tie(0);
- int n,k; cin>>n>>k;
- T=log2(n)+1;
- for(int i=1;i<n;i++){
- int u,v; cin>>u>>v;
- add(u,v); add(v,u);
- }
- dfs(1,0);
- for(int i=1;i<=k;i++){
- int s,t; cin>>s>>t;
- int LCA=lca(s,t);
- val[s]++; val[t]++; val[LCA]--; val[f[LCA][0]]--;
- }
- solve(1,0);
- cout<<ans<<endl;
- }
P3128 [USACO15DEC]最大流Max Flow (树上差分)的更多相关文章
- 洛谷P3128 [USACO15DEC]最大流Max Flow(树上差分)
题意 题目链接 Sol 树上差分模板题 发现自己傻傻的分不清边差分和点差分 边差分就是对边进行操作,我们在\(u, v\)除加上\(val\),同时在\(lca\)处减去\(2 * val\) 点差分 ...
- 洛谷 P3128 [ USACO15DEC ] 最大流Max Flow —— 树上差分
题目:https://www.luogu.org/problemnew/show/P3128 倍增求 lca 也写错了活该第一次惨WA. 代码如下: #include<iostream> ...
- 洛谷3128 [USACO15DEC]最大流Max Flow——树上差分
题目:https://www.luogu.org/problemnew/show/P3128 树上差分.用离线lca,邻接表存好方便. #include<iostream> #includ ...
- 洛谷 P3128 [USACO15DEC]最大流Max Flow-树上差分(点权/点覆盖)(模板题)
因为徐州现场赛的G是树上差分+组合数学,但是比赛的时候没有写出来(自闭),背锅. 会差分数组但是不会树上差分,然后就学了一下. 看了一些东西之后,对树上差分写一点个人的理解: 首先要知道在树上,两点之 ...
- P3128 [USACO15DEC]最大流Max Flow(LCA+树上差分)
P3128 [USACO15DEC]最大流Max Flow 题目描述 Farmer John has installed a new system of pipes to transport mil ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow
P3128 [USACO15DEC]最大流Max Flow 题目描述 Farmer John has installed a new system of N-1N−1 pipes to transpo ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow (树上差分)
###题目链接### 题目大意: 给你一棵树,k 次操作,每次操作中有 a b 两点,这两点路上的所有点都被标记一次.问你 k 次操作之后,整棵树上的点中被标记的最大次数是多少. 分析: 1.由于数 ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow [树链剖分]
题目描述 Farmer John has installed a new system of pipes to transport milk between the stalls in his b ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow [倍增LCA]
题目描述 Farmer John has installed a new system of pipes to transport milk between the stalls in his b ...
随机推荐
- 直播预告:Quadro RTX显卡助力Twinmotion在建筑表现领域火力全开
新年伊始,泛CG继续起航! 2021年首期泛CG分享会 我们邀请了两位业界大咖一起分享 NVIDIA GPU实时渲染在建筑可视化领域的应用 新的一年,继续相约! 1.嘉宾介绍 魏老师从事设计可视化工作 ...
- version can neither be null, empty nor blank
在用mybatis-generator逆向生成mapper和DAO的时候,出现了这个错误. mybatis-generator:generate 原因是在pom.xml中我的mysql依赖没有写版本号 ...
- MalformedByteSequenceException: 1字节的 UTF-8 序列的字节 1 无效
记住,每次修改了配置之后都 clean 一下,把 target 删除 第一种解决方案 去掉 pom.xml 中的 properties <properties> <maven.com ...
- LeetCode404.左叶子之和
题目 法一.广度优先搜索 1 class Solution { 2 public: 3 int sumOfLeftLeaves(TreeNode* root) { 4 if(root == NULL) ...
- os-Bytes环境变量劫持
信息收集 netdiscovery -i eth0 nmap -sV -sC 192.168.43.74 -oA os-Bytes gobuster -u 192.168.43.74 -w /usr/ ...
- zabbix-server安装部署配置
zabbix-server安装部署配置 zabbixLinux安装部署安装脚本 1 一步一步部署 1.1 安装zabbix仓库源 这里安装阿里的zabbix仓库地址 选用zabbix版本3.4 rpm ...
- PW2320芯片N沟道增强型MOSFET
PW2320采用先进的沟道技术,以提供优良的RDS(ON),低栅电荷和电压门极电压低至2.5V时工作.该装置适合用作电池保护或在其他开关应用中. 特征 VDS=20V ID=8A RDS(开)< ...
- Py层次递进与文件修改大程序,模块,name与file
层次的递进与返回 #输入quit的时候返回上一阶层,输入exit退出所有的循环 tag=True while tag==True: level1=input('level1:') if level1= ...
- Linux 下安装 JDK
JDK 依赖包: yum install glibc.i686 卸载原有的 JDK 查看本机已安装软件:rpm -qa 查看与java相关的软件:rpm -qa | grep java 删除自带软件: ...
- SELECT ... FOR UPDATE or SELECT ... FOR SHARE Locking Reads session
小结: 1.注意使用限制 Locking reads are only possible when autocommit is disabled (either by beginning transa ...