[USACO15DEC] 最大流Max Flow && Tarjan 线性 LCA 教学?
显然是树上差分模板题啦,不知道树上差分的童鞋可以去百度一下,很简单。
然后顺带学了一下 tarjan 的 O(N+Q) 离线求LCA的算法 (准确的说难道不应该带个并查集的复杂度吗???)
算法过程具体可以看这里
这里说一下我的理解。
大概可以把所有点分成三类(对于每个dfs的状态):已经遍历到的并且不在dfs栈中的点,已经遍历到并且在dfs栈中的点,未被遍历到的点。
其中,第二种的所有点构成了当前的右链。
然后dfs的过程就是,每个节点的子树遍历完了之后,它自己也就变成了第一种点,我们把这颗子树并到这个节点爸爸上。注意,此时它的爸爸必然是第二种节点。
稍加推理我们就可以发现,任意时刻每个前两种节点所在的并查集的根必然是它最近的一个第二种节点的祖先(如果是第二种节点就是它自己)。
然后我们每次dfs刚刚进入一个节点x的时候,就先回答涉及它的LCA询问:
1.若另一个点y已经被dfs过了(也即是前两种节点),那么它们的LCA就是 get_root(y)。这并不难理解,因为x在右链上,所以y与x的LCA必然是右链上离y最近的点,也就是get_root(y)。
2.若另一个点y没有被dfs过,那么不用管,因为我们必然会在dfs到y的时候处理x。
这么做之后,每组LCA只会被找一次。
复杂度还是线性的,代码还贼好写w
#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define pb push_back
const int N=50005; inline int read(){
int x=0; char ch=getchar();
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
return x;
} vector<int> g[N],ask[N];
int n,m,f[N],a[N],p[N],ans; int gr(int x){ return p[x]==x?x:(p[x]=gr(p[x]));} void dfs(int x,int fa){
f[x]=fa;
for(int i:ask[x]) if(f[i]>=0) a[gr(i)]--,a[f[gr(i)]]--;
for(int i:g[x]) if(i!=fa) dfs(i,x),p[i]=x;
} void update(int x){
for(int i:g[x]) if(i!=f[x]) update(i),a[x]+=a[i];
ans=max(ans,a[x]);
} inline void solve(){
for(int U,V;m;m--)
U=read(),V=read(),a[U]++,a[V]++,ask[U].pb(V),ask[V].pb(U);
memset(f,-1,sizeof(f)),dfs(1,0),update(1);
} int main(){
n=read(),m=read();
for(int i=1;i<=n;i++) p[i]=i;
for(int i=1,U,V;i<n;i++) U=read(),V=read(),g[U].pb(V),g[V].pb(U);
solve(),printf("%d\n",ans);
return 0;
}
[USACO15DEC] 最大流Max Flow && Tarjan 线性 LCA 教学?的更多相关文章
- 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 ...
- luoguP3128 [USACO15DEC]最大流Max Flow 题解(树上差分)
链接一下题目:luoguP3128 [USACO15DEC]最大流Max Flow(树上差分板子题) 如果没有学过树上差分,抠这里(其实很简单的,真的):树上差分总结 学了树上差分,这道题就极其显然了 ...
- 洛谷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 (树上差分)
###题目链接### 题目大意: 给你一棵树,k 次操作,每次操作中有 a b 两点,这两点路上的所有点都被标记一次.问你 k 次操作之后,整棵树上的点中被标记的最大次数是多少. 分析: 1.由于数 ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow [倍增LCA]
题目描述 Farmer John has installed a new system of pipes to transport milk between the stalls in his b ...
- 题解 P3128 【[USACO15DEC]最大流Max Flow】
此类型题目有两种比较常见的做法:树链剖分和树上差分. 本题有多组修改一组询问,因此树上差分会比树链剖分优秀很多. 这里两种方法都进行介绍. 树链剖分和树上差分的本质都是将一颗树转换为一个区间,然后进行 ...
- luogu P3128 [USACO15DEC]最大流Max Flow (树上差分)
题目描述 Farmer John has installed a new system of N-1N−1 pipes to transport milk between the NN stalls ...
- 树上差分——点差分裸题 P3128 [USACO15DEC]最大流Max Flow
讲解: https://rpdreamer.blog.luogu.org/ci-fen-and-shu-shang-ci-fen #include <bits/stdc++.h> #def ...
随机推荐
- Python面试题集合带答案
目录 Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Python的 ...
- SpringCloud Eureka 配置
修改 Eureka server 注册中心上面显示的服务名称 参数配置 默认值 说明 服务注册中心配置 Bean类:org.springframework.cloud.netflix.eu ...
- CMake入门-03-还是HelloWorld
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! 扩展-math 目录里的文件编译成静态库再由 main 函数调用 ...
- hdu 4333 扩展kmp+kmp重复字串去重
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 关于kmp next数组求最短重复字串问题请看:http://www.cnblogs.com/z ...
- CentOS7/RHEL6下,如何查看目录与子目录大小
原文:CentOS7/RHEL6下,如何查看目录与子目录大小 通过强大的[du]命令,可以帮助我们快捷的查看目录的大小,非常实用. du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du ...
- C# EF & linq 常用操作
一.EF的左连接 在EF中,当在dbset使用join关联多表查询时,连接查询的表如果没有建立相应的外键关系时,EF生成的SQL语句是inner join(内联),对于inner join,有所了解的 ...
- js对象 c#对象转换
前台页面 js 创建对象 let t = {}; 数组对象 let c = []; c.push({}) ;// 添加对象 以string格式 传递 JSON JSON.stringify(c); c ...
- gin框架初识(先跑一个简单demo) ①
Gin 是一个 go 写的 web 框架,具有高性能的优点.官方地址:https://github.com/gin-gonic/gin 先跑一个demo(先安装gin框架,具体见官方地址): 1.vs ...
- flex 布局方式
开始啦 1. flex-direction 有关主轴的对齐方式 column 自上到下 row 自左到右 -->默认值 row-reverse 自右到左 column-reverse 自下到上 ...
- 【Struts2】Json插件使用
一.使用步骤 1.1 引入依赖 1.2 在struts.xml文件中配置 一.使用步骤 1.1 引入依赖 <!-- https://mvnrepository.com/artifact/org. ...