###题目链接###

题目大意:

给你一棵树,k 次操作,每次操作中有 a  b 两点,这两点路上的所有点都被标记一次。问你 k 次操作之后,整棵树上的点中被标记的最大次数是多少。

分析:

1、由于数据太大,故可以采用树上差分中的点差分来做到 O(1)标记。

2、需要用 tarjan 离线找出两点间的 lca 。

3、在树上点差分中,还需要找到 lca 的父亲节点。由于在 tarjan 求 lca 时,并查集中的 pre[lca] 并非一直指向的是 lca 的父亲节点,故需要再开一个 fa[] 数组来标记出所有点的 父亲节点 (根节点可忽略)。

4、在求 lca 时,某点对可能被遍历超过一次,对差分的值有影响,故需要再用 flag[] 数组来标记当前点对是否是第一次被找到它们的 lca。

代码如下:

#include<iostream>
#include<algorithm>
#include<string.h>
#define maxn 50008
using namespace std;
int n,k,cnt,tot,ans;
int head[maxn],qhead[maxn],e[maxn],fa[maxn],f[maxn];
bool vis[maxn],flag[];
struct Edge{
int to;
int next;
}edge[maxn<<];
struct Query{
int to;
int next;
}s[];
inline void add(int u,int v){
edge[++cnt].to=v;
edge[cnt].next=head[u];
head[u]=cnt;
return;
}
inline void qadd(int u,int v){
s[++tot].to=v;
s[tot].next=qhead[u];
qhead[u]=tot;
return;
}
inline int find(int x){
if(x==e[x]) return x;
return e[x]=find(e[x]);
}
void tarjan(int u){
vis[u]=true;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(vis[v]) continue;
fa[v]=u;
tarjan(v);
e[v]=u;
}
for(int i=qhead[u];~i;i=s[i].next){
int v=s[i].to;
if(vis[v]&&!flag[i]) {
flag[i]=flag[i^]=true;
int lca=find(v);
f[u]++,f[v]++;
f[lca]--,f[fa[lca]]--;
}
}
return;
}
void dfs(int u,int pre){
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(v==pre) continue;
dfs(v,u);
f[u]+=f[v];
}
ans=max(ans,f[u]);
return;
}
int main()
{
scanf("%d%d",&n,&k);
int A,B;
for(int i=;i<=n;i++) e[i]=i;
for(int i=;i<n;i++){
scanf("%d%d",&A,&B);
add(A,B),add(B,A);
}
tot=-;
memset(qhead,-,sizeof(qhead));
for(int i=;i<=k;i++){
scanf("%d%d",&A,&B);
qadd(A,B),qadd(B,A);
}
tarjan();
dfs(,-);
printf("%d\n",ans);
}

洛谷P3128 [USACO15DEC]最大流Max Flow (树上差分)的更多相关文章

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

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

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

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

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

    题目:https://www.luogu.org/problemnew/show/P3128 树上差分.用离线lca,邻接表存好方便. #include<iostream> #includ ...

  4. 洛谷 P3128 [USACO15DEC]最大流Max Flow-树上差分(点权/点覆盖)(模板题)

    因为徐州现场赛的G是树上差分+组合数学,但是比赛的时候没有写出来(自闭),背锅. 会差分数组但是不会树上差分,然后就学了一下. 看了一些东西之后,对树上差分写一点个人的理解: 首先要知道在树上,两点之 ...

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

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

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

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

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

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

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

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

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

    题目描述 \(FJ\)给他的牛棚的\(N(2≤N≤50,000)\)个隔间之间安装了\(N-1\)根管道,隔间编号从\(1\)到\(N\).所有隔间都被管道连通了. \(FJ\)有\(K(1≤K≤10 ...

随机推荐

  1. Lua-Async 协程的高级用法

    Lua-Async 这是一个基于协程的异步调用库, 该库的设计思路类似JavaScript的Promise, 但相比Promise, 它有更多的灵活性. -- 引入Async local Async ...

  2. 【hibernate】映射可嵌入式组件

    [hibernate]映射可嵌入式组件 转载:https://www.cnblogs.com/yangchongxing/p/10376452.html 可嵌入 Address 类,没有对应的数据表 ...

  3. servlet的三大作用域对象和jsp的九大内置对象及其四大作用域对象

    servlet的三大作用域对象: request(HttpServletRequest) session(HttpSession): application(ServletContext):tomca ...

  4. nginx代理grafana

    希望通过Nginx为服务器上的grafana进行代理,实现通过在当前域名后加/grafana在公网进行访问,开始按照百度的方法弄了几个小时都不行,后面仔细看了官方的文档才弄好,Mark一下. Ngin ...

  5. 《Java基础知识》Java集合(Collection)

    作为一个Developer,Java集合类是我们在工作中运用最多的.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求: Java集合就像一个容器,可以存储任何类型的数 ...

  6. Fuchsia文章汇总

    今日,windows时代的十年已经过去,android/ios时代的十年也行将结束,下一个十年是谁的十年? 操作系统做为软件的基石,做为基础服务的基础,因为各层应用框架的层层封装,正在变的越来越透明, ...

  7. Python面向对象-枚举类型enum

    枚举类型:在实际问题中,有些变量的值被限定在一个有限的范围内.例如:一个星期有且只有7天,一年有且只有十二个月,一个班每周有6门课程等等.如果把这些量说明为整型.字符串或者其他类型显然是不合适.编程界 ...

  8. 完整开发流程管理提升与系统需求分析过程 随堂笔记(day 1) 【2019/10/14】

    Top12原则: 主要资源,重要功能,依据需求重要度进行资源分配, 项目100功能 1 day -> 100Task -> 10 Dev 20% 80% 开发各阶段流程及规范   需求.架 ...

  9. 开源Odoo13更新的模块功能信息(译文)

    本文来源江苏欧度软件:www.odooyun.com 本次Odoo13已于10月初发布,更新的模块有:Odoo会计模块.Odoo活动项目模块.Odoo13审批模块.Odoo评价.客户关系管理(CRM) ...

  10. deinit 没执行

    写了一个自定义的UIView,其中包含代理       然后设置UIViewController为此UIView的代理       结果UIViewController里的deinit没执行,导致内存 ...