首页 > 其他分享 >P3128 [USACO15DEC] Max Flow P

P3128 [USACO15DEC] Max Flow P

时间:2023-09-25 16:23:12浏览次数:48  
标签:sz USACO15DEC 树状 int Max Flow son P3128 father

P3128 [USACO15DEC] Max Flow P
有好几种解决方法,这里讲第一种树状数组 主要是线段树没调好
区间修改,单点查询,很明显我们可以用树状数组,简单又方便

树状数组
#include<bits/stdc++.h>
using namespace std;
const int N = 5e4 + 10;
int n;
int read() {//快读
	char c = getchar(); int x = 0, f = 1;
	for (; c > '9' || c < '0'; c = getchar()) if (c == '-') f = -1;
	for (; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
	return x * f;
}
vector<int> g[N];//存图
//树链剖分模板
int dep[N], fa[N], sz[N], son[N];
void dfs1(int u, int father) {
	dep[u] = dep[father] + 1;
	sz[u] = 1; fa[u] = father;
	for (auto v : g[u]) {
		if (v == father) continue;
		dfs1(v, u);
		sz[u] += sz[v];
		if (sz[son[u]] < sz[v]) son[u] = v;
	}
}
int cnt, id[N], top[N];
void dfs2(int u, int t) {
	top[u] = t; id[u] = ++cnt;
	if (!son[u]) return;
	dfs2(son[u], t);
	for (int v : g[u]) {
		if (v == son[u] || v == fa[u]) continue;
		dfs2(v, v);
	}
}
//树状数组模板
int a[N];
void add(int x,int k) {
	for (; x <= n; x += x & -x) {
		a[x] += k;
	}
}
int ask(int x) {
	int ans = 0;
	for (; x; x -= x & -x) {
		ans += a[x];
	}
	return ans;
}
void add_path(int u, int v) {
	while (top[v] != top[u]) {
		if (dep[top[u]] < dep[top[v]]) swap(u, v);//一定要注意是dep[top[u]],一开始写成dep[u],调试了半天
		add(id[top[u]],1),add(id[u]+1,-1);//利用差分思想
		u = fa[top[u]];
	}
	if (dep[u] < dep[v]) swap(v, u);
	add(id[v],1),add(id[u]+1,-1);
}


int main() {
	int m;
	n=read();m=read();
	for (int i = 1; i < n; i++) {
		int x=read(), y=read();
		g[x].push_back(y);
		g[y].push_back(x);
	}
	dfs1(1,0);
	dfs2(1, 1);
	while (m--) {
		int u=read(), v=read();
		add_path(u,v);
	}
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		ans = max(ans, ask(i));//寻找最大值
	}
	cout << ans;
	return 0;
}

标签:sz,USACO15DEC,树状,int,Max,Flow,son,P3128,father
From: https://www.cnblogs.com/bu-fan/p/17728103.html

相关文章

  • [CF1810G] The Maximum Prefix
    题目描述You'regoingtogenerateanarray$a$withalengthofatmost$n$,whereeach$a_{i}$equalseither$1$or$-1$.Yougeneratethisarrayinthefollowingway.First,youchoosesomeinteger$k$($1\lek\len$),whichdecid......
  • [LeetCode] 1353. Maximum Number of Events That Can Be Attended 最多可以参加的会
    Youaregivenanarrayof events where events[i]=[startDayi,endDayi].Everyevent i startsat startDayi andendsat endDayi.Youcanattendanevent i atanyday d where startTimei<=d<=endTimei.Youcanonlyattendoneeventatanytime ......
  • [HNCTF 2022 WEEK2]e@sy_flower
    花指令分析如果没接触过花指令,先看这个博客,大致了解一下花指令https://www.cnblogs.com/Here-is-SG/p/15802040.html点击此处下载附件查壳32位,无壳去除花指令用32位ida打开,就看到红色字体的XREF(非自然程序流程,可以用它对程序流进行跟踪和控制,估计以后有的学了),这时候F5反......
  • Codeforces 1868D. Flower-like Pseudotree
    题目链接:D-Flower-likePseudotree题目大意:给定度数数组\({d_n}\),要求构造一个\(n\)个点\(n\)条边的连通图(也就是基环树),允许有重边,但不能有自环。需要满足第\(i\)个点的度数恰好为\(d_i\),并且将环上的边全部删去后,剩下的每棵树的高度(以原先在环上的点为根)相同。首先考......
  • 3dmax:车削详解
    一、车削动作原理:围绕线段的一个轴旋转一周1.1在前视图里画一段白线,此为要车削的原始线条:默认以b为轴心,旋转一周【对齐---中心】以a为轴心,旋转一周【对齐---最小(最左端)】以c为轴心,旋转一周【对齐---最大(最右端)】2.手动调整旋转轴心位置:点到编辑里展开命令,点......
  • 无涯教程-JavaScript - MAXIFS函数
    描述MAXIFS函数返回由一组给定条件或条件指定的单元格中的最大值。Excel2016中已添加此功能。语法MAXIFS(max_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)争论Argument描述Required/Optionalmax_rangeTheactualrangeofcellsinwh......
  • 无涯教程-JavaScript - MAXA函数
    描述MAXA函数返回参数列表中的最大值。语法MAXA(value1,[value2]...)争论Argument描述Required/OptionalValue1Thefirstnumberargumentforwhichyouwanttofindthelargestvalue.RequiredValue2...Numberarguments2to255forwhichyouwanttofin......
  • Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connect
    报错 Maxretriesexceededwithurl:/(CausedbyNewConnectionError('<urllib3.connection.HTTPSConnectionobjectat0x000001A73833FD00>:Failedtoestablishanewconnection:[WinError10060]  pipuninstallrequestsurllib3  #先卸载pipinstallre......
  • 已解决tensorflow.python.framework.errors_impl.InvalidArgumentError: slice index
    已解决tensorflow.python.framework.errors_impl.InvalidArgumentError:sliceindex1ofdimension0outofbounds.文章目录报错问题解决方法声明报错问题之前在工作中遇到过这个坑,记录一下问题以及解决方法,不一定针对所有情况都能用,但是可以供大家参考。问题描述如下:tensor......
  • linux 中 find命令 -maxdepth 和 -mindepth 选项
     001、[root@pc1dir001]#lstest01test02ww.txtxx.map[root@pc1dir001]#tree.├──test01│  ├──cc.csv│  └──kk.txt├──test02│  ├──dirxx│  │  └──diryy│  │  ├──rr.ped│  │  └......