充分理清限制与条件+构造二分图+最小割:ARC142E

news2024/11/20 10:34:26

https://www.luogu.com.cn/problem/AT_arc142_e

考虑 $$

他的充要条件是是什么:

  1. a i , a j ≥ m i n ( b i , b j ) a_i,a_j\ge min(b_i,b_j) ai,ajmin(bi,bj)
  2. 存在 a i ≥ m a x ( b i , b j ) a_i\ge max(b_i,b_j) aimax(bi,bj)

第一个条件直接预处理一下。

第二个条件,同时有非常多限制交叉,我们就非常想网络流建模来搞。(而且数据范围明细提示着我们)但是有个尴尬的问题,哪些点连源点,哪些连汇点。

然后就是此题最巧妙的地方了,可以构造二分图!

我们发现 ( a i , b i ) (a_i,b_i) (ai,bi) 是成对的,这似乎提示着我们什么。考虑对其分类

对于一对限制 ( i , j ) (i,j) (i,j),如果目前只满足条件1,不满足条件2 , a i ≥ b i a_i\ge b_i aibi a j ≥ b j a_j\ge b_j ajbj 必然是一个成立,一个不成立。同时,这里 i , j i,j i,j 独立,所以这就变成了一个二分图了!

最后是建模。我们这里发现是左边和右边至少满足一个,典型的最小割模型。

#include<bits/stdc++.h>

using namespace std;
#define int long long
inline int read(){int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;
ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+
(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
//#define M
//#define mo
#define N 100010


using namespace atcoder;

struct node {
	int u, v;  
};
int n, m, i, j, k, T;
int ans, a[N], b[N], u, v, S; 
vector<node>G; 

signed main()
{
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
//	srand(time(NULL));
//	T=read();
//	while(T--) {
//
//	}	
	mf_graph<int>F(200010); 
	n=read(); S=(n+5)*100+1; T=(n+5)*100+2; 
	for(i=1; i<=n; ++i) a[i]=read(), b[i]=read(); 
	m=read(); 
	for(i=1; i<=m; ++i) {
		u=read(); v=read(); 
		k=min(b[u], b[v]);  
		if(a[u]<k) ans+=k-a[u], a[u]=k; 
		if(a[v]<k) ans+=k-a[v], a[v]=k; 
		G.pb({u, v}); 
	}
//	printf("%lld\n", ans); 
	for(i=1; i<=n; ++i) {
//		printf("%lld %lld\n", a[i], b[i]); 
		if(a[i]>=b[i]) {
//			printf("> %lld\n", i); 
			for(j=a[i]+1; j<=100; ++j) 
				F.add_edge(S, i*100+j, 1); 
			for(j=1; j<100; ++j) 
				F.add_edge(i*100+j, i*100+j+1, 1e9); 
		}
		else {
			for(j=a[i]+1; j<=100; ++j) 
				F.add_edge(i*100+j, T, 1); 
			for(j=1; j<100; ++j) 
			F.add_edge(i*100+j+1, i*100+j, 1e9); 
		}
		
	}
	for(auto t : G) {
		u=t.u; v=t.v; 
		k=max(b[u], b[v]); 
		if(a[u]>=b[u] && a[v]>=b[v]) continue; 
		if(a[u]>=b[v] && a[v]>=b[u]) continue; 
//		if(k==13) continue; 
		if(a[u]>=b[u]) {
//					printf("%d -> %d\n", u*100+k, v*100+k); 

			F.add_edge(u*100+k, v*100+k, 1e9); 
		}
		else {
//					printf("%d -> %d\n", v*100+k, u*100+k); 

			F.add_edge(v*100+k, u*100+k, 1e9); 
		}
	}
	ans=ans+F.flow(S, T); 
	printf("%lld", ans); 
	return 0;
}

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

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

相关文章

【目标检测】——PE-YOLO精读

yolo&#xff0c;暗光目标检测 论文&#xff1a;PE-YOLO 1. 简介 卷积神经网络&#xff08;CNNs&#xff09;在近年来如何推动了物体检测的发展。许多检测器已经被提出&#xff0c;而且在许多基准数据集上的性能正在不断提高。然而&#xff0c;大多数现有的检测器都是在正常条…

初识jmeter及简单使用

目录 1、打开页面&#xff1a; 2、添加线程组&#xff1a; 3、线程组中设置参数&#xff1a; 4、添加请求 5、添加一个http请求后&#xff0c;设置请求内容 6、添加察看结果树 7、执行&#xff0c;查看结果 一般步骤是&#xff1a;在测试计划下面新建一个线程组&#xf…

【Java项目推荐之黑马头条】项目中的内容安全和自动审核如何实现的?

前言 在学习Java的路上还是遇到了很多不错的好项目的&#xff0c;今天分享给大家&#xff0c;希望能对大家面试有所帮助&#xff01; 后续会继续推荐其他好的项目&#xff0c;这次推荐的是B站开源的视频黑马头条项目&#xff0c;来吧学会它一起去虐面试官&#xff01;&#x…

mac清理垃圾的软件有哪些?这三款我最推荐

没错&#xff0c;Mac电脑真的好用&#xff0c;但是清理系统垃圾可不是件容易的事。由于Mac系统的封闭性&#xff0c;系统的缓存垃圾常常隐藏得让人发现不了。不过&#xff0c;别担心&#xff01;有一些专业的Mac清理软件可以帮你解决这一系列问题&#xff0c;让清理垃圾变得轻松…

【面试】C/C++面试八股

C/C面试八股 编译过程的四个阶段C和C语言的区别简单介绍一下三大特性多态的实现原理虚函数的构成原理虚函数的调用原理虚表指针在什么地方进行初始化的&#xff1f;构造函数为什么不能是虚函数为什么建议将析构函数设为虚函数虚函数和纯虚函数的区别抽象类类对象的对象模型内存…

python开发幸运水果抽奖大转盘

概述 当我女朋友跟我说要吃水果&#xff0c;又不知道吃啥水果时候&#xff0c;她以为难为到我了&#xff0c;有啥事难为到程序员的呢&#xff01; 今天用python利用第三方tkinterthreadingtime库开发一个幸运水果抽奖大转盘&#xff01;抽到啥吃啥 详细 老规矩&#xff01;咱…

PyTorch入门之【AlexNet】

参考文献&#xff1a;https://www.bilibili.com/video/BV1DP411C7Bw/?spm_id_from333.999.0.0&vd_source98d31d5c9db8c0021988f2c2c25a9620 AlexNet 是一个经典的卷积神经网络模型&#xff0c;用于图像分类任务。 目录 大纲dataloadermodeltraintest 大纲 各个文件的作用&…

【将文本编码为图像灰度级别】以 ASCII 编码并与灰度级别位混合将文本字符串隐藏到图像像素的最低位中,使其不明显研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

HTTP进阶,Cookie,响应的回报结果含义,ajax,form表单,不同状态码代表的结果

目录 一、Cookie 二、响应的回报结果含义 三、实际开发中的选择 一、Cookie Cookie是浏览器本地存储数据的一种机制, 在浏览器访问服务器之间&#xff0c;此时你的浏览器对着个服务器之间是一点也不了解的&#xff0c;你的浏览器上是没有任何和着个服务器相关的数据的。 浏览…

【LinuxC】时间、时区,相关命令、函数

文章目录 一、序1.1 时间和时区1.11 时间1.12 时区 1.2 查看时间时区的命令1.21 Windows1.22 Linux 二、C语言函数2.1 通用2.11 函数简介2.12 数据类型简介 2.2 windows 和 Linux特有函数2.3 C语言示例 一、序 1.1 时间和时区 1.11 时间 时间是一种用来描述物体运动变化的量…

怎么把家里闲置旧苹果手机变成家用安防监控摄像头

环境 监控端&#xff1a;苹果5s iOS10.2.1 观看端&#xff1a;苹果11Pro 网络情况&#xff1a;同一个局域网 问题描述 怎么把家里闲置旧苹果手机变成家用安防监控摄像头 解决方案 1.旧苹果5s手机在App Store下载采集端软件 打开app 授权联网、相机、麦克风等权限&#xf…

用VLD调查VC内存泄漏

一、发现内存泄漏 使用VS2022&#xff0c;发现提示有内存泄漏&#xff0c;检查了所有的new&#xff0c;确认都有相应的delete释放。 Detected memory leaks! Dumping objects -> {1914} normal block at 0x0000021FDFFBD2E0, 48 bytes long.Data: < >…

OpenResty安装-(基于Nginx的高性能Web平台,可在Nginx端编码业务)

文章目录 安装OpenResty1.安装1&#xff09;安装开发库2&#xff09;安装OpenResty仓库3&#xff09;安装OpenResty4&#xff09;安装opm工具5&#xff09;目录结构6&#xff09;配置nginx的环境变量 2.启动和运行3.备注 安装OpenResty 1.安装 首先你的Linux虚拟机必须联网 …

【网络安全 --- 工具安装】Centos 7 详细安装过程及xshell,FTP等工具的安装(提供资源)

VMware虚拟机的安装教程如下&#xff0c;如没有安装&#xff0c;可以参考这篇博客安装&#xff08;提供资源&#xff09; 【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程&am…

高数:第三章:一元函数积分学

文章目录 一、不定积分(一)两个基本概念&#xff1a;原函数、不定积分(二)原函数的存在性&#xff1a;原函数存在定理(三)不定积分的性质(四)基本积分公式(五)三种主要积分法1.凑微分 (第一类换元法)2.换元法 (第二类换元法)①三角代换②根式代换③倒代换 3.分部积分法4.其他技…

工厂管理软件中的PLM管理

第一部分&#xff1a;介绍PLM管理的定义和背景 1.1 定义&#xff1a;PLM管理是指通过工厂管理软件实现对产品生命周期各个阶段的全面管理和协同合作&#xff0c;包括产品设计、工艺规划、生产制造、质量控制、供应链管理等环节。 1.2 背景&#xff1a;随着市场竞争的加剧和消…

希尔排序:优化插入排序的精妙算法

排序算法在计算机科学中扮演着重要的角色&#xff0c;其中希尔排序&#xff08;Shell Sort&#xff09;是一种经典的排序算法。本文将带您深入了解希尔排序&#xff0c;包括其工作原理、性能分析以及如何使用 Java 进行实现。 什么是希尔排序&#xff1f; 希尔排序&#xff0c…

数据结构与算法-(7)---栈的应用-(4)后缀表达式求值

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

【Java 进阶篇】深入了解JDBCTemplate:简化Java数据库操作

数据库操作是几乎所有现代应用程序的一部分。从存储和检索数据到管理业务逻辑&#xff0c;数据库操作是不可或缺的。在Java应用程序中&#xff0c;JDBCTemplate是一种强大的工具&#xff0c;可帮助开发人员轻松进行数据库操作。本文将深入探讨JDBCTemplate&#xff0c;了解它的…

【MySQL】基本查询 (一)

文章目录 一. 基础查询二. where条件子句三. NULL的比较结束语 操作如下表 //创建表结构 mysql> create table exam_result(-> id int unsigned primary key auto_increment,-> name varchar(20) not null comment 同学姓名,-> chinese float default 0.0 comment…