洛谷——P3128 [USACO15DEC]最大流Max Flow
https://www.luogu.org/problem/show?pid=3128
题目描述
Farmer John has installed a new system of pipes to transport milk between the
stalls in his barn (
), conveniently numbered
. Each pipe connects a pair of stalls, and all stalls are connected to each-other via paths of pipes.
FJ is pumping milk between pairs of stalls (
). For the
th such pair, you are told two stalls
and
, 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
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
to
, then it counts as being pumped through the endpoint stalls
and
, as well as through every stall along the path between them.
FJ给他的牛棚的N(2≤N≤50,000)个隔间之间安装了N-1根管道,隔间编号从1到N。所有隔间都被管道连通了。
FJ有K(1≤K≤100,000)条运输牛奶的路线,第i条路线从隔间si运输到隔间ti。一条运输路线会给它的两个端点处的隔间以及中间途径的所有隔间带来一个单位的运输压力,你需要计算压力最大的隔间的压力是多少。
输入输出格式
输入格式:
The first line of the input contains and
.
The next lines each contain two integers
and
(
) describing a pipe
between stalls and
.
The next lines each contain two integers
and
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.
输入输出样例
- 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
- 9
树剖+树上查分
- #include <algorithm>
- #include <cstdio>
- using namespace std;
- const int N(+);
- int n,k,u,v;
- int head[N],sumedge;
- struct Edge
- {
- int v,next;
- Edge(int v=,int next=):
- v(v),next(next){}
- }edge[N<<];
- void ins(int u,int v)
- {
- edge[++sumedge]=Edge(v,head[u]);
- head[u]=sumedge;
- }
- int size[N],deep[N],dad[N],top[N];
- void DFS(int x)
- {
- size[x]=; deep[x]=deep[dad[x]]+;
- for(int i=head[x];i;i=edge[i].next)
- {
- int v=edge[i].v;
- if(dad[x]==v) continue;
- dad[v]=x; DFS(v); size[x]+=size[v];
- }
- }
- void DFS_(int x)
- {
- int t=; if(!top[x]) top[x]=x;
- for(int i=head[x];i;i=edge[i].next)
- {
- int v=edge[i].v;
- if(dad[x]!=v&&size[t]<size[v]) t=v;
- }
- if(t) top[t]=top[x],DFS_(t);
- for(int i=head[x];i;i=edge[i].next)
- {
- int v=edge[i].v;
- if(dad[x]!=v&&t!=v) DFS_(v);
- }
- }
- int LCA(int x,int y)
- {
- for(;top[x]!=top[y];x=dad[top[x]])
- if(deep[top[x]]<deep[top[y]]) swap(x,y);
- return deep[x]<deep[y]?x:y;
- }
- int ans,val[N];
- void DFS_val(int x)
- {
- for(int i=head[x];i;i=edge[i].next)
- {
- int v=edge[i].v;
- if(dad[x]==v) continue;
- DFS_val(v); val[x]+=val[v];
- }
- ans=max(val[x],ans);
- }
- int main()
- {
- scanf("%d%d",&n,&k);
- for(int i=;i<n;i++)
- {
- scanf("%d%d",&u,&v);
- ins(u,v); ins(v,u);
- }
- DFS(); DFS_();
- for(;k--;)
- {
- scanf("%d%d",&u,&v);
- val[u]++; val[v]++;
- int lca=LCA(u,v);
- val[lca]--;val[dad[lca]]--;
- }
- DFS_val();
- printf("%d",ans);
- return ;
- }
洛谷——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 [树链剖分]
题目描述 Farmer John has installed a new system of pipes to transport milk between the stalls in his b ...
- 洛谷 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 ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow(树上差分)
题意 题目链接 Sol 树上差分模板题 发现自己傻傻的分不清边差分和点差分 边差分就是对边进行操作,我们在\(u, v\)除加上\(val\),同时在\(lca\)处减去\(2 * val\) 点差分 ...
- 洛谷 P3128 [USACO15DEC]最大流Max Flow
题目描述 \(FJ\)给他的牛棚的\(N(2≤N≤50,000)\)个隔间之间安装了\(N-1\)根管道,隔间编号从\(1\)到\(N\).所有隔间都被管道连通了. \(FJ\)有\(K(1≤K≤10 ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow (树上差分)
###题目链接### 题目大意: 给你一棵树,k 次操作,每次操作中有 a b 两点,这两点路上的所有点都被标记一次.问你 k 次操作之后,整棵树上的点中被标记的最大次数是多少. 分析: 1.由于数 ...
- 题解——洛谷P3128 [USACO15DEC]最大流Max Flow
裸的树上差分 因为要求点权所以在点上差分即可 #include <cstdio> #include <algorithm> #include <cstring> u ...
- 洛谷 P3128 [USACO15DEC]最大流Max Flow-树上差分(点权/点覆盖)(模板题)
因为徐州现场赛的G是树上差分+组合数学,但是比赛的时候没有写出来(自闭),背锅. 会差分数组但是不会树上差分,然后就学了一下. 看了一些东西之后,对树上差分写一点个人的理解: 首先要知道在树上,两点之 ...
随机推荐
- android图像处理系列之五-- 给图片添加边框(中)
前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...
- 42.cnpm不是内部命令的解决方案:配置环境变量
转自:https://blog.csdn.net/u014540814/article/details/78777961
- C#使用一般处理程序(ashx)中session
.ashx中引用 session必须 using System.Web.SessionState ,继承IReadOnlySessionState/IRequiresSessionState IRea ...
- POJ——T 2406 Power Strings
http://poj.org/problem?id=2406 Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 50627 ...
- Android学习笔记进阶十二之裁截图片
package xiaosi.cut; import java.io.File; import android.app.Activity; import android.content.Intent; ...
- 关于img标签的探讨
关于img标签的探讨:一直以来img属于那一种标签受到困惑,因为它既有块元素的特性也有行内元素的属性.它独占一行,也可以设置宽高. 在此重新学习一下标签元素的分类;html元素的分类:块元素.内联元素 ...
- php基础篇之一
1.PHP是什么 官方文档:超文本预处理器 2.PHP能够做一些什么? PHP主要应用在一下领域: (1)服务器端脚本,需要:PHP解析器,PHP服务器,PHP浏览器. (2)命令行脚本,只需要PHP ...
- 百度地图API 添加标签
1.手动创建数据,实际项目则是接受GPS信息 /建立坐标点: // lng:经度 lat:纬度 var points = [ {"lng":112.58,"lat&quo ...
- 非常有用的sql脚本
/*sql 语法学习*/ /*函数的学习---------------------------------------*/ 获取当前时间(时/分/秒):select convert(varchar(1 ...
- 本地 oracle 安装文件夹满触发 ORA-7445 [_memmove()+64] 导致Instance Crashed 的事故
近期处理了一个问题,原因是因为命中ORA-600 [kole_t2u], [34] - description, bugs 导致 在udump 文件夹下大量转储 出cdmp 文件, 然后这些 cdmp ...