2024江苏省赛 H. 完蛋,我被房产包围了 【费用流、分时图】

完蛋,我被房产包围了

1

n ≤ 200 , ∑ n ≤ 1 0 4 n \leq 200, \sum n \leq 10^4 n200,n104

求出最大利润

思路

每个代理商每次买房狂潮只能卖出 1 1 1 套房子,小红卖出一套房子贬值 1 1 1 元,小绿卖出一套房子贬值 ⌈ a i 10 ⌉ \lceil \dfrac{a_i}{10} \rceil 10ai,小蓝卖出一套房子不贬值。
因此我们应该尽可能让小蓝卖房子,其次再交给小红,最后没得选择才交给小绿,因为卖出房子总归是有利润的,只是多少的问题,所以最优的策略一定是尽可能卖更多数量的房子。

我们先将小红和小蓝占满,让他们每次狂潮都有房子卖,他们卖不完的房子再交给贬值最多的小绿,由于小绿优先选择价值最高的房子贩卖,所以我们把不需要卖的房子交给小绿,并不会影响我们最终的最大利润决策

通过上述的分析,我们不难发现:对于每一次 买房狂潮 ,我们应该尽可能跑满最大流,并且要最小化贬值,也就是最小费用最大流

我们可以这样建模:

  1. 对于每个代理商 j j j,建立其在时刻 i i i 的点: i d ( i , j ) id(i, j) id(i,j),这里总共有 3 n 3n 3n 个分时点
  2. 对于每个代理商 j j j 的每个时刻点,我们连边 i d ( i − 1 , j ) → i d ( i , j ) id(i - 1, j) \rarr id(i, j) id(i1,j)id(i,j),容量为 ∞ \infty ,费用为 0 0 0,表示这个代理商手里持有的房子,随着时间推移而保留
  3. 对于每次买房狂潮,我们对当前时刻 i i i 的每个代理商 j j j 连边: i d ( i , j ) → T id(i, j) \rarr T id(i,j)T,容量为 1 1 1,费用为 0 0 0,表示每个代理商在这个时刻最多贩卖一套房子
  4. 对于每个房子 x x x,连边: S → x S \rarr x Sx,容量为 1 1 1,费用为 0 0 0,表示这个房子最多被卖 1 1 1 次(这里新增 O ( n ) O(n) O(n) 个点),连边: x → T x \rarr T xT,容量为 1 1 1,费用为 a x a_x ax,表示这个房子不交给代理商,最后没有被卖出去的贬值,也即是一块钱利润都没有
  5. 对于每个房子 x x x,我们在其分配的时刻 i i i,对每个代理商连边:
    x → i d ( i , 0 ) x \rarr id(i, 0) xid(i,0),容量为 1 1 1,费用为 1 1 1,表示通过小红卖这套房要贬值 1 1 1
    x → i d ( i , 1 ) x \rarr id(i, 1) xid(i,1) ,容量为 1 1 1,费用为 ⌈ a i 10 ⌉ \lceil \frac{a_i}{10} \rceil 10ai,表示通过小绿卖这套房要贬值 ⌈ a i 10 ⌉ \lceil \frac{a_i}{10} \rceil 10ai
    x → i d ( i , 2 ) x \rarr id(i, 2) xid(i,2) ,容量为 1 1 1,费用为 0 0 0,表示通过小蓝卖不贬值

最后我们用 ∑ a i − ( S → T \sum a_i - (S \rarr T ai(ST最小费用最大流) 就是答案了

#include<bits/stdc++.h>
#define fore(i,l,r)	for(int i=(int)(l);i<(int)(r);++i)
#define fi first
#define se second
#define endl '\n'
#define ull unsigned long long
#define ALL(v) v.begin(), v.end()
#define Debug(x, ed) std::cerr << #x << " = " << x << ed;const int INF=0x3f3f3f3f;
const long long INFLL=1e18;typedef long long ll;struct MCF {struct Edge {int v, c, w; //边终点、容量、费用Edge(int v, int c, int w) : v(v), c(c), w(w) {}};const int n;std::vector<Edge> e;std::vector<std::vector<int>> g;std::vector<ll> h, dis;std::vector<int> pre;bool dijkstra(int s, int t) {dis.assign(n + 1, std::numeric_limits<ll>::max());pre.assign(n + 1, -1);std::priority_queue<std::pair<ll, int>, std::vector<std::pair<ll, int>>, std::greater<std::pair<ll, int>>> que;dis[s] = 0;que.emplace(0, s);while (!que.empty()) {ll d = que.top().first;int u = que.top().second;que.pop();if (dis[u] < d) continue;for (int i : g[u]) {int v = e[i].v;int c = e[i].c;int w = e[i].w;if (c > 0 && dis[v] > d + h[u] - h[v] + w) {dis[v] = d + h[u] - h[v] + w;pre[v] = i;que.emplace(dis[v], v);}}}return dis[t] != std::numeric_limits<ll>::max();}MCF(int n) : n(n), g(n + 1) {}void addEdge(int u, int v, int c, int w) {g[u].push_back(e.size());e.emplace_back(v, c, w);g[v].push_back(e.size());e.emplace_back(u, 0, -w);}std::pair<int, ll> flow(int s, int t) {int flow = 0;ll cost = 0;h.assign(n + 1, 0);while (dijkstra(s, t)) {for (int i = 1; i <= n; ++i) h[i] += dis[i];int aug = std::numeric_limits<int>::max();for (int i = t; i != s; i = e[pre[i] ^ 1].v) aug = std::min(aug, e[pre[i]].c);for (int i = t; i != s; i = e[pre[i] ^ 1].v) {e[pre[i]].c -= aug;e[pre[i] ^ 1].c += aug;}flow += aug;cost += ll(aug) * h[t];}return std::make_pair(flow, cost);}
};int main(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int t;std::cin >> t;while(t--){int n;std::cin >> n;MCF mcf(4 * n + 10);int tot = 3 * n + 1;int S = ++tot, T = ++tot;auto get_id = [&](int time, int j) -> int {return n * j + time;};int ans = 0;fore(i, 0, n){if(i > 0){fore(j, 0, 3){int lst = get_id(i - 1, j), now = get_id(i, j);mcf.addEdge(lst, now, INF, 0);}}int opt;std::cin >> opt;if(opt == 1){int w;std::cin >> w;ans += w;int id = ++tot;mcf.addEdge(S, id, 1, 0);mcf.addEdge(id, get_id(i, 0), 1, 1);mcf.addEdge(id, get_id(i, 1), 1, (w + 9) / 10);mcf.addEdge(id, get_id(i, 2), 1, 0);mcf.addEdge(id, T, 1, w);}else{fore(j, 0, 3){int now = get_id(i, j);mcf.addEdge(now, T, 1, 0);}}}ans -= mcf.flow(S, T).se;std::cout << ans << endl;}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue加密传输,后端获取进行解密。

文章目录 概要Vue前端加密后端进行解密小结 概要 vue界面加密传输&#xff0c;后端获取进行解密&#xff0c;适用于登录时密码加密传输。 Vue前端加密 1.安装jsencrypt包&#xff1a; npm install jsencrypt安装完成后package.json会有jsencrypt依赖 2.引入jsencrypt.js到文…

Trieve实践:好用功的开源RAG

目录 RAG概述 RAG架构 Trieve Trieve介绍 Trieve使用 初始化 自行搭建RAG Trieve是什么&#xff0c;RAG是什么&#xff0c;本文来带你了解。其实在很多产品应用里面都会有RAG,比如ai客服&#xff0c;针对性的智能问答&#xff0c;都是基于RAG实现的 RAG概述 RAG 是一种…

【竞技宝】英超:曼城击败热刺,赢西汉姆联就夺冠

曼城在英超补赛中跟热刺相遇,这场比赛对于双方来说都必须赢。曼城要是拿不下热刺,联赛夺冠形势就不容乐观。热刺则是需要击败曼城,保留拿到下赛季欧冠的一线希望。所以,热刺和曼城开场就全力以赴。上半场热刺和曼城门将都做出精彩扑救,比分维持在0比0。下半场曼城金靴哈兰德发威…

ubuntu升级python

添加Python官方PPA源 sudo add-apt-repository ppa:deadsnakes/ppa 执行会显示各个版本ubuntu可以安装哪些python版本 更新软件包索引 sudo apt update 安装需要版本Python sudo apt install python3.11 检查Python版本: which python11 /usr/bin/python3.11 设置为系统默认Pyt…

前端无样式id或者class等来定位标签

目录&#xff1a; 1、使用背景2、代码处理 1、使用背景 客户使用我们产品组件&#xff0c;发现替换文件&#xff0c;每次替换都会新增如下的样式&#xff0c;造就样式错乱&#xff0c;是组件的文件&#xff0c;目前临时处理的话就是替换文件时删除新增的样式&#xff0c;但是发…

SAP揭秘者- SAP工单ATP检查专题之工单ATP检查的需求背景及相关操作

文章摘要&#xff1a; 从本章开始&#xff0c;我将给大家详细地介绍SAP生产订单/工单 ATP检查的相关的配置和操作&#xff0c;以及在项目上具体是怎么使用的&#xff0c;包含怎么应对实际项目中的一些疑难点需求。 ATP检查会应用到MM,SD,PP三个模块中&#xff0c;这里我们主要…

Spring初学入门(跟学笔记)

一、Spring概述 Spring是一款主流的Java EE轻量级开源框架。 Spring的核心模块&#xff1a;IoC&#xff08;控制反转&#xff0c;指把创建对象过程交给Spring管理 &#xff09;、AOP&#xff08;面向切面编程&#xff0c;在不修改源代码的基础上增强代码功能&#xff09; 二、…

ps找不到d3dcompiler_47.dll怎么办,无法启动,7个解决方法能搞定

当您在尝试运行某个游戏时&#xff0c;如果系统提示“d3dcompiler_47.dll丢失”或“无法找到d3dcompiler_47.dll”&#xff0c;这通常意味着DirectX组件不完整或损坏。下面是修复此问题的详细步骤&#xff1a; 一、d3dcompiler_47.dll的属性概述 文件名称&#xff1a;d3dcompi…

echarts去掉网格线

柱子后面白色的线太丑了&#xff01; 去掉他 x轴平行的线&#xff0c;就写在yAxis下面 yAxis: {type: value,splitLine: {lineStyle: {type: dashed, // 虚线样式color: rgba(255, 255, 255, 0.15) // 虚线颜色}},//去除网格线}, 这个颜色一定要加‘’&#xff0c;不然不生效…

python 批量webp格式转换成jpg

首先&#xff0c;你需要安装Pillow库。如果还未安装&#xff0c;可以通过pip安装&#xff1a; pip install Pillow 创建一个Python脚本来读取webp文件&#xff0c;并将其转换为jpg格式。 只需修改source_folder和dest_folder变量为你的实际文件夹路径即可使用这个脚本。 fro…

3SRB2516-ASEMI适配大功率充电桩3SRB2516

编辑&#xff1a;ll 3SRB2516-ASEMI适配大功率充电桩3SRB2516 型号&#xff1a;3SRB2516 品牌&#xff1a;ASEMI 封装&#xff1a;SGBJ-5 正向电流&#xff08;Id&#xff09;&#xff1a;25A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1600V 正向浪涌电流&…

EFDC建模方法及在地表水环境评价、水源地划分、排污口论证

原文链接&#xff1a;EFDC建模方法及在地表水环境评价、水源地划分、排污口论证https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247604351&idx3&snc39009090054285af83c60bad162f321&chksmfa821998cdf5908ed8ad874ee9fa121f21ec03dd3ba62f9082027335ca5…