P3128 [USACO15DEC]最大流Max Flow
思路
这个题哪里有那么费脑筋
我们可以树链剖分嘛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的更多相关文章
- 洛谷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(LCA+树上差分)
P3128 [USACO15DEC]最大流Max Flow 题目描述 Farmer John has installed a new system of pipes to transport mil ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow [树链剖分]
题目描述 Farmer John has installed a new system of pipes to transport milk between the stalls in his b ...
- 【luogu P3128 [USACO15DEC]最大流Max Flow】 题解
题目链接:https://www.luogu.org/problemnew/show/P3128 菜 #include <cstdio> #include <cstring> ...
- 洛谷 P3128 [ USACO15DEC ] 最大流Max Flow —— 树上差分
题目:https://www.luogu.org/problemnew/show/P3128 倍增求 lca 也写错了活该第一次惨WA. 代码如下: #include<iostream> ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow [倍增LCA]
题目描述 Farmer John has installed a new system of pipes to transport milk between the stalls in his b ...
- 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 ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow(树上差分)
题意 题目链接 Sol 树上差分模板题 发现自己傻傻的分不清边差分和点差分 边差分就是对边进行操作,我们在\(u, v\)除加上\(val\),同时在\(lca\)处减去\(2 * val\) 点差分 ...
随机推荐
- sqlserver中查询表字段的sql语句
sqlserver中的表信息字段信息这些东西也是放到系统表中的,以下sql语句用于查询某表的字段信息. select t1.id object_id,t1.name object_name,t2.va ...
- Visio 保存卡死解决办法
右键Visio图标 属性--兼容性--以兼容模式运行这个程序 要打上对勾 且下面的系统版本要选和你电脑版本一致的选项 特权等级 以管理员身份运行次程序 要打上对勾
- tfs分支操作
1.在代码管理器中找到代码项 右击——分支与合并——分支——默认所有选项——确定. 2.可能刚打出的分支为红色,签入,修改代码,待测试后代码合并到主干中(下拉选出他的上级,一般为主干),删除分支. 3 ...
- leetCoder-wordBreak判断能否分词
题目 Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determ ...
- 爬取笔下wenxue小说
import urllib.request from bs4 import BeautifulSoup import re def gethtml(url): page=urllib.request. ...
- python random函数
.random模块方法说明 random.random()函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间. random.uniform()正好弥补了上面函数的不 ...
- django之路由分析
URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. URLconf配置 基本格式: from django.conf.urls i ...
- JS实现document.ready
通常我们想要在页面内容加载完成后运行 JS 时,都会使用 window.onload 来处理,比如: window.onload = function(){ alert('Hello World!') ...
- vue 加载更多2
<template lang="html"> <div class="yo-scroll" :class="{'down':(sta ...
- JS3D效果
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...