【洛谷】P1344

news2024/10/22 3:01:29

[USACO4.4] 追查坏牛奶 Pollutant Control

#图论 #流 #最小割

题目描述

你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶。

很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网。这个送货网很大,而且关系复杂。你知道这批牛奶要发给哪个零售商,但是要把这批牛奶送到他手中有许多种途径。

送货网由一些仓库和运输卡车组成,每辆卡车都在各自固定的两个仓库之间单向运输牛奶。在追查这些有三聚氰胺的牛奶的时候,有必要保证它不被送到零售商手里,所以必须使某些运输卡车停止运输,但是停止每辆卡车都会有一定的经济损失。

你的任务是,在保证坏牛奶不送到零售商的前提下,制定出停止卡车运输的方案,使损失最小。

输入格式

1 1 1 行两个整数 N N N M M M N N N 表示仓库的数目, M M M 表示运输卡车的数量。仓库 1 1 1 代表发货工厂,仓库 N N N 代表有三聚氰胺的牛奶要发往的零售商。

2 ∼ M + 1 2\sim M+1 2M+1 行,每行 3 3 3 个整数 S i S_i Si E i E_i Ei C i C_i Ci。其中 S i S_i Si E i E_i Ei 分别表示这辆卡车的出发仓库和目的仓库。 C i C_i Ci 表示让这辆卡车停止运输的损失。

输出格式

两个整数 C C C T T T C C C 表示最小的损失, T T T 表示在损失最小的前提下,最少要停止的卡车数。

样例 #1

样例输入 #1

4 5
1 3 100
3 2 50
2 4 60
1 2 40
2 3 80

样例输出 #1

60 1

提示

对于 100 % 100 \% 100% 的数据,满足 2 ≤ N ≤ 32 2 \le N \le 32 2N32 0 ≤ M ≤ 1 0 3 0 \le M \le 10^3 0M103 1 ≤ S i ≤ N 1 \le S_i \le N 1SiN 1 ≤ E i ≤ N 1 \le E_i \le N 1EiN 0 ≤ C i ≤ 2 × 1 0 6 0 \le C_i \le 2 \times 10^6 0Ci2×106

题目翻译来自 NOCOW。

USACO Training Section 4.4

思路

在最小割的前提下,还需要求最小割的割的边数。

由于最大边数 M ≤ 1 0 3 M \leq 10^3 M103,因此我们对原来的权值变为 w ∗ m o d + 1 w*mod + 1 wmod+1,其中 m o d mod mod设置为大于 1 0 3 10^3 103的数,这样跑完 D i n i c Dinic Dinic后得到 a n s ans ans,那么最小割为 a n s / m o d ans / mod ans/mod,割的边数为 a n s % m o d ans \% mod ans%mod

因为 m o d > 1 0 3 mod > 10^3 mod>103,因此不会进位,这样是合法的,时间复杂度为 O ( n m 2 ) O(nm^2) O(nm2)

代码


const int N = 2e5 + 10;
const int Mod = 2000;

struct edge {
	int u, v, c;
};

vector<edge>e;
vector<int>h[N];
int d[N], cur[N];
int n, m, S, T;
void add(int u, int v, int c) {
	e.push_back({ u,v,c });
	h[u].push_back(e.size() - 1);
}

bool bfs() { //对点分层,找增广路
	memset(d, 0, sizeof d);
	queue<int>q;
	q.push(S); d[S] = 1;
	while (q.size()) {
		int u = q.front(); q.pop();
		for (int i = 0; i < h[u].size(); i++) {
			int j = h[u][i];
			int v = e[j].v, c = e[j].c;
			if (d[v] == 0 && c > 0) {
				d[v] = d[u] + 1;
				q.push(v);
				if (v == T)return true;
			}
		}
	}
	return false;
}

int dfs(int u, int mf) { //多路增广
	if (u == T) return mf;
	int sum = 0;
	for (int i = cur[u]; i < h[u].size(); i++) {
		cur[u] = i; //记住u的当前弧
		int j = h[u][i];
		int v = e[j].v, c = e[j].c;
		if (d[v] == d[u] + 1 && c > 0) {
			int f = dfs(v, min(c, mf));
			e[j].c -= f;
			e[j ^ 1].c += f; //更新残留网
			sum += f;
			mf -= f;
			if (mf == 0)break;
		}
	}
	if (sum == 0)d[u] = 0;
	return sum;
}

int dinic() {
	int res = 0;
	while (bfs()) {
		memset(cur, 0, sizeof cur);
		res += dfs(S, inf);
	}

	return res;
}

void solve() {
	cin >> n >> m;

	S = 1, T = n;

	for (int i = 1; i <= m; ++i) {
		int u, v, c;
		cin >> u >> v >> c;
		add(u, v, c * Mod + 1);
		add(v, u, 0);
	}

	int res = dinic();

	std::cout << res / Mod << " " << res % Mod << "\n";
}

signed main() {
	ios::sync_with_stdio(0);
	std::cin.tie(0);
	std::cout.tie(0);

	int t = 1;
	//cin >> t;

	while (t--) {
		solve();
	}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2219401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#学习笔记(一)

C#学习笔记&#xff08;一&#xff09; 简介第一章 上位机开发环境之 VS 使用和.NET 平台基础一、安装软件二、创建项目三、第一个Hello world四、解决方案与项目五、Debug 和 Release 的区别六、代码的生产过程七、CLR的其它功能 简介 C# .NET工控上位机开发 在工控领域&…

Nuxt.js 应用中的 build:before 事件钩子详解

title: Nuxt.js 应用中的 build:before 事件钩子详解 date: 2024/10/20 updated: 2024/10/20 author: cmdragon excerpt: build:before 钩子在 Nuxt.js 中是一种有力的工具,使开发者能够在应用的构建流程开始之前进行自定义处理和配置。在处理动态需求和配置时,开发者可以…

深度解析RLS(Recursive Least Squares)算法

目录 一、引言二、RLS算法的基本思想三、RLS算法的数学推导四、RLS算法的特点五、RLS算法的应用场景六、RLS算法的局限性七、总结 一、引言 在自适应滤波领域&#xff0c;LMS&#xff08;Least Mean Squares&#xff09;算法因其计算简单、实现方便而广受欢迎。然而&#xff0…

C++ 哈希桶和封装unordered_map和unordered_set

目录 哈希桶的概念 哈希桶的结构 哈希桶的结点 哈希桶的类 Insert插入函数 Find查找函数 Erase删除函数 哈希的两种仿函数(int) 和(string) 哈希表的改造 ​编辑 迭代器 改造 unordered_map和unordered_set的封装 前言 上一篇文章讲的哈希表&#xff0c;属于闭散…

解决k8s集群中安装ks3.4.1开启日志失败问题

问题 安装kubesphere v3.4.1时&#xff0c;开启了日志功能&#xff0c;部署时有三个pod报错了 Failed to pull image “busybox:latest”: rpc error: code Unknown desc failed to pull and unpack image “docker.io/library/busybox:latest”: failed to copy: httpRead…

【D3.js in Action 3 精译_034】4.1 D3 中的坐标轴的创建(中篇):定义横纵坐标轴的比例尺

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

京存助力北京某电力研究所数据采集

北京某电力研究所已建成了一套以光纤为主&#xff0c;卫星、载波、微波等多种通信方式共存&#xff0c;分层级的电力专用的网络通信架构体系。随着用电、配电对网络的要求提高&#xff0c;以及终端通信入网的迅速发展&#xff0c;迫切地需要高效的通信管理系统来应对大规模、复…

STM32传感器模块编程实践(七) MLX90614红外测温模块简介及驱动源码

文章目录 一.概要二.MLX90614主要技术指标三.模块参考原理图四.模块接线说明五.模块工作原理介绍六.模块通讯协议介绍七.STM32单片机与MLX90614模块实现体温测量实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 八.小结 一.概要 一般来说&#xff0c;测温方式可分为接触式和…

大模型常见算子定义

本文将汇总大模型常用的算子定义&#xff0c;方便快速根据定义公式评估其计算量。 LayerNorm 这是在BERT、GPT等模型中广泛使用的LayerNorm&#xff1a; RMSNorm RMSNorm(root mean square)发现LayerNorm的中心偏移没什么用(减去均值等操作)。将其去掉之后&#xff0c;效果几乎…

51系列--人体身高体重BMI指数检测健康秤

本文主要介绍基于51单片机实现的人体身高体重BMI指数检测健康秤称设计&#xff08;程序、电路图、PCB以及文档说明书见文末链接&#xff09; 一、简介 本系统由STC89C52单片机、LCD1602液晶显示、按键、超声波测距、HX711称重传感器模块&#xff08;0-1000KG&#xff09;以及…

O(1)调度算法与CFS

目录 引言 linux内核的O&#xff08;1&#xff09;进程调度算法介绍 主要特点 工作原理 优点 缺点 运行队列 活动队列 过期队列 active指针和expired指针 O(1)调度器&#xff0c;两个队列的机制 两个队列的机制如下&#xff1a; 这个算法后期被CFS替代 CFS 工作原…

进阶篇-Redis集群算法详细介绍

目录 一 、集群是什么1.1 主从复制与集群的架构区别 二、Redis集群的作用三、集群算法3.1.分片-槽位slot3.2 分片是什么3.3如何找到找到给定的key值分片3.4分片的优势 四、槽位映射的三中国解决方案4.1 哈希取余分区算法4.2 哈希一致性算法4.2.1 背景以及概念4.2.2 算法的步骤4…

【Python加密与解密】深入了解Python中的数据加密技术!

Python加密与解密&#xff1a;深入了解Python中的数据加密技术 在现代信息时代&#xff0c;数据加密成为保障网络和通信安全的重要手段之一。无论是在保护个人隐私还是在保证企业数据的安全性方面&#xff0c;加密技术都发挥着关键作用。Python 作为一种流行的编程语言&#x…

(10) GTest c++单元测试(mac版)

文章目录 概要安装实现机制-断言&#xff08;简单、独立的测试&#xff09;实现机制-测试套件实现机制-Test Fixture和事件 概要 官方文档 https://google.github.io/googletest/ 安装 git clone https://github.com/google/googletestcd googletestmkdir build && c…

鸿蒙开发 四十五 鸿蒙状态管理(嵌套对象界面更新)

当运行时的状态变量变化&#xff0c;UI重新渲染&#xff0c;在ArkUI中称为状态管理机制&#xff0c;前提是变量必须被装饰器修饰。不是状态变量的所有更改都会引起刷新&#xff0c;只有可以被框架观测到的更改才会引起UI刷新。其中boolen、string、number类型&#xff0c;可观察…

PyQt 入门教程(3)基础知识 | 3.2、加载资源文件

文章目录 一、加载资源文件1、PyQt5加载资源文件2、PyQt6加载资源文件 一、加载资源文件 常见的资源文件有图像、图标、样式表&#xff0c;下面分别介绍下加载资源文件的常用方法 1、PyQt5加载资源文件 创建.qrc文件&#xff1a; 可以使用QtCreator或手动创建一个.qrc文件&…

注意LED亚型号区分

一. 前言 最近产品试产遇到一次批量事故&#xff1a;全部绿光LED的光功率不达标。最终定位到的原因就是未注意LED的细分型号&#xff0c;试产采用的批次与研发时的亚型号不一样&#xff0c;光功率范围不一致。在此记录下来&#xff0c;供大家做参考&#xff0c;避免走弯路。 …

桂林旅游一点通:SpringBoot平台应用

3系统分析 3.1可行性分析 通过对本桂林旅游景点导游平台实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本桂林旅游景点导游平台采用SSM框架&#xff0c;JAVA作…

uniapp结合uview-ui创建项目

准备工作&#xff1a; 下载HBuilderX;官网地址:HBuilderX-高效极客技巧 安装node.js;官网地址&#xff1a;Node.js — 在任何地方运行 JavaScript,下载所需版本&#xff0c;安装后配置好环境变量即可 方式一&#xff08;NPM安装方式&#xff09;&#xff1a; 1、打开开发者…

OpenRTP 乱序排包和差分抖动计算

OpenRTP 开源地址 OpenRTP 开源地址 暂时使用h264 aac 的音频去测试&#xff0c;点开配置去选择 1 音视频同步问题 先要解决一个音视频同步问题&#xff0c;否则包排不排序都不对&#xff0c;这是因为视频时间戳不一定能够对上音频&#xff0c;为什么呢&#xff1f;因为大部…