hdu7298 Coin(网络流+按时间拆点)

news2024/11/26 15:24:46

题目

t(t<=10)组样例,每次给n(n<=3e3)个人,

第i个人,在任意时刻,都最多只能有ai(1<=ai<=3e3)个硬币

其中k(k<=n)个是小F的朋友,依次用点号的形式给出

初始时,每个人都有一个硬币,

游戏进行m(m<=3e3)局,每局给出A、B两个人,

A、B可以在以下三种操作中选一个:

① A给B一个硬币

② B给A一个硬币

③ 什么都不做

求最后m局过后,小F的k个朋友的硬币总和最大可能是多少

思路来源

官方题解

题解

无明显贪心策略,首先想到网络流

主要是任意时刻都需要不超过ai,所以需要按时间拆点,这一步不太好想到

不操作的时候,就可以按时间正序,从时间前面的点通过ai的流量连到时间后面的点

剩下的就很套路了,

初始时,每个人都有一个硬币,超级源点s连每个人,流量1

游戏的时候,AB之间根据当前时间各新增一个点,连流量1的无向边,

最终,统计k个朋友最后时刻的点的总流量,这k个点,连超级汇点,流量ai

虽然流量限制是点的限制,但无需额外拆点,可以通过加在入边/出边上控制

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f3f3f3f3fll;
const int INF=0x3f3f3f3f,maxn=9e3+10,maxm=maxn*8,M=(1<<10)+5;
int level[maxn];
int head[maxn],a[maxn],cnt;
int n,m,k,u,v,las[maxn];
struct edge{
	int v,nex;
	ll w;
}e[maxm];
void init(){
	cnt=0;
	memset(head,-1,sizeof head);
}
void add(int u,int v,ll w){
	e[cnt].v=v;
	e[cnt].w=w;
	e[cnt].nex=head[u];
	head[u]=cnt++;
}
void add2(int u,int v,ll w,bool op) {
	add(u,v,w);
	add(v,u,op?0:w);
}bool bfs(int s,int t){
	queue<int>q;
	memset(level,0,sizeof level);
	level[s]=1;
	q.push(s);
	while(!q.empty()){
		int x=q.front();
		q.pop();
		if(x==t)return 1;
		for(int u=head[x];~u;u=e[u].nex){
			int v=e[u].v;ll w=e[u].w;
			if(!level[v]&&w){
				level[v]=level[x]+1;
				q.push(v);
			}
		}
	}
	return 0;
}
ll dfs(int u,ll maxf,int t){
	if(u==t)return maxf;
	ll ret=0;
	for(int i=head[u];~i;i=e[i].nex){
		int v=e[i].v;ll w=e[i].w;
		if(level[u]+1==level[v]&&w){
			ll MIN=min(maxf-ret,w);
			w=dfs(v,MIN,t);
			e[i].w-=w;
			e[i^1].w+=w;
			ret+=w;
			if(ret==maxf)break;
		}
	}
	if(!ret)level[u]=-1;//优化,防止重搜,说明u这一路不可能有流量了 
	return ret;
}
ll Dinic(int s,int t){
	ll ans=0;
	while(bfs(s,t))
	ans+=dfs(s,INF,t);
	return ans;
}
int main(){ 
	int T;
	scanf("%d",&T);
	while(T--){
		init();
		scanf("%d%d%d",&n,&m,&k);
		int ss=maxn-1,ee=maxn-2,now=n;
		for(int i=1;i<=n;++i){
			scanf("%d",&a[i]);
			las[i]=i;
			add2(ss,i,1,1);
		}
		for(int i=1;i<=m;++i){
			scanf("%d%d",&u,&v);
			int fu=las[u],fv=las[v];
			las[u]=++now;
			las[v]=++now;
			add2(fu,las[u],a[u],1);
			add2(fv,las[v],a[v],1);
			add2(las[u],las[v],1,0);
		}
		for(int i=1;i<=k;++i){
			scanf("%d",&v);
			add2(las[v],ee,a[v],1);
		}
		printf("%lld\n",Dinic(ss,ee));
	}
	return 0;
}

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

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

相关文章

<j-editable-table 新增行 按钮去掉方法

新增行 按钮去掉方法 修改的内容 要去掉组件中的新增行添加按钮&#xff0c;你可以将:actionButton"true"的值改为:actionButton“false”&#xff0c;即将true改为false&#xff0c; 去掉前的 <j-editable-tableref"editableMeTable":loading"m…

react中使用echarts

下载插件 npm install echarts npm install echarts-for-react 引入模块 import ReactEcharts from "echarts-for-react" import echarts from "echarts"; import React from react; import ReactEcharts from echarts-for-react const Tiao () >…

LabelImg 标注工具的使用(获取标注的图片数据集)

目录 1 安装及使用1.1 安装1.2 使用 2 标注格式 1 安装及使用 1.1 安装 Win R输入cmd进入终端界面 LabelImg 安装命令&#xff1a; pip install labelimg没有配置国内 pip 源的&#xff0c;请看 ⇒ \Rightarrow ⇒ 临时办法&#xff1a;在上述命令末尾添加源&#xff0c…

分布式系统的应用程序性能监视工具-skywalking

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式链路日志追踪、剖析、服务网格遥测分析、度量聚合和可视化一体化解决方案。 在应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案中常用的…

【C语言敲重点(五)】嵌入式“八股文“(2)

1. struct和union的区别&#xff1f; 答&#xff1a;①联合体所有的成员都共享一块内存&#xff0c;修改联合体的任一成员的数据就会覆盖到其他成员的数据&#xff1b; ②结构体的成员变量都有独立的内存空间&#xff0c;且结构体的成员数据之间是不影响的 2. struct和class的…

HTTPS——HTTPS如何加密数据,“证书“为什么可以应对 “中间人攻击“

文章目录 前言一、HTTPS是什么二、HTTPS加密方法三、HTTPS加密流程对称加密非对称加密中间人攻击证书 总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话&#xff0c;互关一下&#xff0c;以后互相学习&…

Linux笔记——管道相关命令以及shell编程

文章目录 管道相关命令 目标 准备工作 1 cut 1.1 目标 1.2 路径 1.3 实现 2 sort 2.1 目标 2.2 路径 2.3 实现 第一步: 对字符串排序 第二步&#xff1a;去重排序 第三步: 对数值排序 默认按照字符串排序 升序 -n 倒序 -r 第四步: 对成绩排序【按照列排序】 …

python实现逻辑回归-清风数学建模-二分类水果数据

所用数据 &#x1f449;&#x1f449;&#x1f449;二分类水果数据 1.数据预处理 可以看到有4个特征&#xff0c;2种分类结果&#xff0c;最后4个没有分类结果的数据是拿来预测的 # 1. 数据预处理 import pandas as pd df pd.read_excel(oridata/二分类水果数据.xlsx,use…

启用window10专业版系统自带的远程桌面

启用window10专业版系统自带的远程桌面 Windows操作系统作为应用最广泛的个人电脑操作系统&#xff0c;在我们身边几乎随处可见。虽然近些年因手机、平板电脑等设备的兴起&#xff0c;个人电脑的存在感逐渐降低&#xff0c;但对于一些大型程序和特殊情况&#xff08;办公软件、…

超细Python性能测试实战,Locust框架性能测试(详全)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 当涉及到评估应用…

《零基础入门学习Python》第062讲:论一只爬虫的自我修养10:安装Scrapy

这节课我们来谈谈 Scrapy 说到Python爬虫&#xff0c;大牛们都会不约而同地提起Scrapy。因为Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。可以应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。 Scrapy最初是为了页面抓…

【微信小程序】使用iView组件库中的icons资源

要在微信小程序中使用iView组件库中的icons资源&#xff0c;需要先下载并引入iView组件库&#xff0c;并按照iView的文档进行配置和使用。 以下是一般的使用步骤&#xff1a; 下载iView组件库的源码或使用npm安装iView。 在小程序项目的app.json文件中添加iView组件库的引入配…

概率论的学习和整理21:用EXCEL来做假设检验(未完成草稿)

目录 1 EXCEL可以用来做假设检验 1.1 如何打开 数据分析 和 规划求解 1.2 EXCEL里关于正态分布的准备知识 2 基本的假设检验 2.1 最基本的假设检验&#xff0c;单边的Z检验 2.1 双样本F检验 2.1.1 例题 2.1.2 进行F检验之前需要满足一些假设条件 2.1.3 计算步骤 2.1…

qs库的使用

前言 qs是一个流行的查询参数序列化和解析库。可以将一个普通的object序列化成一个查询字符串&#xff0c;或者反过来可以将一个查询字符串解析成一个object&#xff0c;而且支持复杂的嵌套。在工作中&#xff0c;最经常使用qs的地方就是请求参数格式转换的时候&#xff0c;但是…

QT通过TCP协议发送结构体数据

文章目录 前言1. memcpy方式1.1 发送整个结构体1.2 发送部分数据 2. QDataStream2.1 符号<<2.2 wrieteRawData 总结 前言 做上位机的时候下发数据&#xff0c;数据是一个结构体&#xff0c;这里就阐述一下怎么通过TCP协议发送结构体。 我自己写的时候主要通过两种方式&a…

K8S初级入门系列之五-Pod的高级特性

一、前言 前一篇我们了解了Pod的基本概念和操作&#xff0c;本篇我们继续研究Pod的一些高级特性&#xff0c;包括Pod的生命周期&#xff0c;pod探针&#xff0c;pod的调度等。 二、生命周期 1、Pod的生命周期 Pod的生命周期示意图如下&#xff1a; 挂起(Pending)&#xff0c…

webpack配置externals汇总

webpack5.88.1 vue2.7.14 vue-router3.6.5 element-ui2.15.13 ant-design-vue1.7.8 externals用于提取第三方依赖包&#xff0c;使用cdn资源的方式将第三方依赖包引入项目&#xff0c;可以大大减少项目打包体积 配置externals对象有技巧&#xff1a; key 就是 import aaa from …

No3: 学习过程中故障成长积累

文章目录 故障积累1、编码错误导致 故障积累1、编码错误导致

JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

一、版本roadmap图 官方地址&#xff1a; https://www.oracle.com/java/technologies/java-se-support-roadmap.html 从上图可以很清晰得可以看出&#xff0c;JDK7,JDK8,JDK11,JDK17,JDK21是长期维护的版本。从目前来看&#xff0c;JDK8到2023年已经有将近10年的历史了&#…

C++笔记之使用STL的function实现回调机制

C笔记之使用STL的function实现回调机制 code review! 文章目录 C笔记之使用STL的function实现回调机制1.使用普通函数2.使用匿名函数&#xff08;Lambda表达式&#xff09;3.使用函数对象&#xff08;functor&#xff09;4.运行输出 1.使用普通函数 代码 #include <funct…