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

洛谷 P3128 [USACO15DEC] Max Flow P

时间:2024-08-28 11:15:35浏览次数:4  
标签:USACO15DEC int Max Flow dfs fa P3128 LCA --

洛谷 P3128 [USACO15DEC] Max Flow P

题意

给定一棵 \(n\) 个点的树,给定 \(k\) 个点对 \((u,v)\),把 \(u\) 到 \(v\) 路径上所有点的点权加一,最后求最大点权。

思路

树上差分模版。

维护 \(a_i\) 表示每个点到根的加法标记。

对于每个点对 \((u,v)\),把 \(a_u\),\(a_v\) 加一,\(a_{LCA(u,v)}\),\(a_{fa(LCA(u,v))}\) 减一。

因为 \(u\) 到根全部加一,\(v\) 到根全部加一,会让 \(LCA(u,v)\) 多算一次(因为它本身也要加),\(fa(LCA(u,v))\) 多算一次(\(LCA(u,v)\) 减过一次)。

最后遍历一遍数计算答案即可。

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 5e4 + 5;
int tot, ver[N << 1], nxt[N << 1], head[N];
int n, k, fa[N][20], de[N];
ll a[N], ans;
void add(int x, int y) {
	ver[++ tot] = y;
	nxt[tot] = head[x];
	head[x] = tot;
}
void DFS(int x) {
    de[x] = de[fa[x][0]] + 1;
    for (int i = 1; i <= 19; i ++)
        fa[x][i] = fa[fa[x][i - 1]][i - 1];
    for (int i = head[x], y; i; i = nxt[i]) {
        y = ver[i];
        if (y == fa[x][0]) continue;
        fa[y][0] = x;
        DFS(y);
    }
}
inline int LCA(int x, int y) {
    if (de[x] < de[y]) swap(x, y);
    for (int i = 19; i >= 0; i --) 
        if (de[fa[x][i]] >= de[y]) x = fa[x][i];
    if (x == y) return x;
    for (int i = 19; i >= 0; i --)
        if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
    return fa[x][0];
}
void dfs(int x) {
	for (int i = head[x], y; i; i = nxt[i]) {
		y = ver[i];
		if (y == fa[x][0]) continue;
		dfs(y); a[x] += a[y]; // 前缀和
	}
}
int main() {
	cin >> n >> k;
	for (int i = 1, u, v; i < n; i ++) {
		cin >> u >> v;
		add(u, v); add(v, u);
	}
	DFS(1);
	for (int i = 1, u, v; i <= k; i ++) {
		cin >> u >> v;
		a[u] ++, a[v] ++, a[fa[LCA(u, v)][0]] --, a[LCA(u, v)] --; // 差分
	}
	dfs(1); // 统计答案
	for (int i = 1; i <= n; i ++) ans = max(ans, a[i]);
	cout << ans << "\n";
	return 0;
}  

标签:USACO15DEC,int,Max,Flow,dfs,fa,P3128,LCA,--
From: https://www.cnblogs.com/maniubi/p/18384230

相关文章

  • 3D 建模和设计软件 Autodesk 3ds Max、Blender 和 AutoCAD 优缺点比较
    Autodesk3dsMax、Blender和AutoCAD是三款广泛使用的3D建模和设计软件,它们各有优缺点。以下是对这三款软件的比较:Autodesk3dsMax优点:强大的建模和渲染功能:提供丰富的建模工具和功能,特别适合建筑可视化、动画和游戏开发。强大的渲染引擎(如V-Ray、Arnold)支持高质量......
  • CF1810G The Maximum Prefix 题解
    Description构造一个长度最多为\(n\)的数组\(a\),其每个元素均为\(1\)或\(-1\)。生成方式如下:选择任意整数\(k\in[1,n]\)作为\(a\)的长度。对于\(\foralli\in[1,k]\),有\(p_i\)的概率设\(a_i=1\),有\(1-p_i\)的概率设\(a_i=-1\)。在数列被生成后,计算\(s_i=a......
  • AntFlow系列教程之流程提交
    AntFlow为笔者基于activiti深度定制的一款简单易用的开源低代码流程引擎,类似钉钉工作流.详细介绍可以查看企业级仿钉钉低代码工作流引擎开源啦.项目刚开源不久,希望喜欢的大佬们多点赞关注.后面除了会写文章介绍AntFlow的使用,还会写文章介绍activiti8的使用.流程的操......
  • 如何使用TensorFlow构建AI模型
    TensorFlow已成为构建机器学习模型最受欢迎的框架之一。无论你是初学者还是经验丰富的数据科学家,了解如何使用TensorFlow构建AI模型对充分利用机器学习的潜力至关重要。本指南将引导你逐步创建TensorFlowAI模型,从基础知识到更高级的概念,确保你拥有坚实的基础。了解Te......
  • 从Flow小白到专家,Winter '25让流程自动化更简单!
    Salesforce平台每月提供超过1万亿次自动化服务,每月可节省超1090亿小时,预计为客户创造超2万亿美元的商业价值。这是一组不可思议的数字,充分展现了软件自动化的力量。Flow是整个Salesforce平台自动化的未来,一直在将大量资源用于开发Flow创新。本次Winter'25中自然也少不了Flow的......
  • 计算机毕业设计Spark+Tensorflow股票推荐系统 股票预测系统 股票可视化 股票数据分析
    1. 需求分析基于Spark的股票大数据分析及可视化系统是一个利用Spark分布式计算框架进行股票市场数据处理、分析和可视化的系统。它能够处理大规模的实时股票数据,包括股票价格、交易量、市场指标等,提供实时数据处理、数据可视化与展示和并提供相应决策支持。因此基于Spark的......
  • TensorFlow实现Softmax回归
    原理模型相比线性回归,Softmax只多一个分类的操作,即预测结果由连续值变为离散值,为了实现这样的结果,我们可以使最后一层具有多个神经元,而输入不变,其结构如图所示:为了实现分类,我们使用一个Softmax操作,Softmax函数能够将未规范化的预测变换为非负数并且总和为1,同时让模型保持可......
  • 用TensorFlow实现线性回归
    说明本文采用TensorFlow框架进行讲解,虽然之前的文章都采用mxnet,但是我发现tensorflow提供了免费的gpu可供使用,所以果断开始改为tensorflow,若要实现文章代码,可以使用colaboratory进行运行,当然,如果您已经安装了tensorflow,可以采用python直接运行。贡献学习时采取动手学深度学......
  • Mac M1用tensorflow中的Keras进行基本图像分类
    一.为什么要进行图像分类、图像识别目的是为了利用计算机对图像进行处理、分析和理解,让计算机能够像人类一样理解和解释图像中的内容。‌这一技术的应用范围广泛,包括但不限于人脸识别和商品识别。人脸识别技术主要应用于安全检查、身份核验与移动支付等领域,而商品识别则广......
  • TensorFlow 的基本概念和使用场景
    TensorFlow是一个开源的机器学习框架,由Google开发和维护。它允许开发者使用图形计算的方式构建和训练机器学习模型。TensorFlow的基本概念如下:张量(Tensor):TensorFlow使用张量来表示数据。张量是多维数组,在计算图中流动,是TensorFlow的基本数据单元。张量可以是标量(0维数组)、......