当前位置: 首页 > news >正文

CF311E思路分享(网络流,最大权闭合子图)

https://codeforces.com/contest/311/problem/E

题意概述

给定 \(n\) 只狗,初始性别为 \(0\)\(1\),可以花费 \(v_i\) 元改变第 \(i\) 只狗的性别。

\(m\) 个富人,第 \(i\) 个富人会指定 \(k_i\) 只特定的狗和一个性别,如果指定的所有狗的性别与指定的性别一致,获得 \(w_i\) 元;如果该富人是你的朋友,且你没有满足他的要求,需要支付给他固定 \(g\) 元。

求最大净收益(可能为负)。

思路

为了满足某些要求以获得利润,可能需要花费代价,存在依赖关系且要求最大化利润,符合最大权闭合子图模型。

最大权闭合子图

最大权闭合子图:在一个有向图中,每个点有点权,选择权值和最大的一个子图,并且满足子图中每个点的所有后继都在子图中,这个子图就是最大权闭合子图。

求解最大权的方法:虚拟出源点 \(s\) 和汇点 \(t\),从 \(s\) 向原图中所有点权为正的点连边,容量为点权;从原图中所有点权为负的点向 \(t\) 连边,容量为点权的绝对值;对于原图中的边,容量为无穷大。最终答案为原图中的所有正点权之和 \(-\) 最小割。

解释如下:

首先规定分到 \(S\) 集的点作为被选中作为子图中的点。

考虑割的意义:如果割掉 \(s\)\(i\) 的边,那么 \(i\) 不在 \(S\) 集中,相当于不选 \(i\) 作为子图中的点;如果割掉 \(i\)\(t\) 的边,那么 \(i\) 不在 \(T\) 集中,相当于选 \(i\) 作为子图中的点。

因此,割的容量为:不选的正点权之和 \(+\) 选择的负点权的绝对值之和。

而子图的权值和为:所有的正点权之和 \(-\) 不选的正点权之和 \(-\) 选择的负点权的绝对值之和,也就是:所有正点权之和 \(-\) 割的容量。

因此只需要最小化割的容量即可。同时由于原图的边容量为无穷大,在最小割中不可能被割掉,选中的子图满足原图的依赖关系。


回到本题。

为了方便处理,先将所有点的性别都改成 \(1\),此时的收益为:要求性别为 \(1\)\(w_i\) 之和 \(-\) 初始性别为 \(0\) 的点的 \(v_i\) 之和 \(-\) 要求性别为 \(0\) 且是朋友的要求数量 \(\cdot g\)

对于每个点,规定选中某点代表改变该点的性别。如果原本性别为 \(0\),改变性别相当于反悔,贡献为 \(v_i\);如果原本性别为 \(1\),贡献为 \(-v_i\)

对于每个要求,虚拟成新点。

如果要求性别为 \(0\),选择该要求需要将所有关联点性别都改成 \(0\),于是从该虚拟点向所有关联点连边。如果不是朋友,贡献为 \(w_i\);否则为 \(w_i + g\)

如果要求性别为 \(1\),选择该要求需要所有关联点中任意一个被修改成 \(0\),于是从所有关联点向该虚拟点连边。如果不是朋友,贡献为 \(-w_i\),否则为 \(- w_i - g\)

将贡献作为点权,求出最大权闭合子图即可。


//author:kzssCCC#include <bits/stdc++.h>
using namespace std;
using ll = long long;const ll INF = 9e18;class Q{
public:int t,f,k;ll w;vector<int> a;Q() = default;	Q(int t,int f,int k,ll w,vector<int>& a):t(t),f(f),k(k),w(w),a(a){}
};void solve(){int n,m,g;cin >> n >> m >> g;vector<int> sex(n+1);vector<ll> V(n+1);for (int i=1;i<=n;i++){cin >> sex[i];}for (int i=1;i<=n;i++){cin >> V[i];}vector<Q> que(m+1);for (int i=1;i<=m;i++){int t,k;ll w;cin >> t >> w >> k;vector<int> a(k+1);for (int j=1;j<=k;j++){cin >> a[j];}int f;cin >> f;que[i] = {t,f,k,w,a};}ll res = 0;for (int i=1;i<=n;i++){if (sex[i]==0){res -= V[i];}}for (int i=1;i<=m;i++){if (que[i].t==1){res += que[i].w;}if (que[i].t==0 && que[i].f==1){res -= g;}}ll sum = 0;vector<vector<array<ll,3>>> adj(n+m+3);int s=n+m+1,t=n+m+2;auto add = [&](int u,int v,ll w){adj[u].push_back({w,(int)adj[v].size(),v});adj[v].push_back({0,(int)adj[u].size()-1,u});};for (int i=1;i<=n;i++){if (sex[i]==0){add(s,i,V[i]);sum += V[i];}else{add(i,t,V[i]);	}}for (int i=1;i<=m;i++){if (que[i].t==0){add(s,i+n,que[i].w+(que[i].f?g:0));sum += que[i].w+(que[i].f?g:0);for (int j=1;j<=que[i].k;j++){add(i+n,que[i].a[j],INF);}}else{add(i+n,t,que[i].w+(que[i].f?g:0));for (int j=1;j<=que[i].k;j++){add(que[i].a[j],i+n,INF);}}}vector<int> cur,depth;auto bfs = [&](){depth = vector<int>(n+m+3,-1);queue<int> q;depth[s] = 0;q.push(s);while (!q.empty()){int u = q.front();q.pop();for (auto& [w,rev,v]:adj[u]){if (w>0 && depth[v]==-1){depth[v] = depth[u]+1;q.push(v);if (v==t) return true;}}}return false;};function<ll(int,ll)> dfs = [&](int u,ll mf){if (u==t) return mf;ll curf = 0;int len = adj[u].size();for (int& i=cur[u];i<len;i++){auto& [w,rev,v] = adj[u][i];if (w==0 || depth[v]!=depth[u]+1) continue;ll f = dfs(v,min(mf,w));curf += f;adj[v][rev][0] += f;mf -= f;w -= f;if (mf==0) break;}if (curf==0){depth[u] = -1;}return curf;};ll mxf = 0;while (bfs()){cur = vector<int>(n+m+3);mxf += dfs(s,INF);}cout << res+sum-mxf << '\n';
}int main(){ios::sync_with_stdio(false);cin.tie(0);int t = 1;// cin >> t;while (t--) solve();return 0;
}
http://www.jsqmd.com/news/771755/

相关文章:

  • 2026年甘肃不锈钢水箱选型测评指南:供应商测评与落地避坑QA - 深度智识库
  • 全自动双透镜耦合设备:高精度赋能,解锁光器件封装新范式
  • 开发多语言内容生成平台时如何动态选择最优大模型
  • 进口高端还是国产智能? 2026 固瑞克划线机厂家推荐:全场景配套,实力品牌深度解析 - 深度智识库
  • 大模型中转哪个机构好
  • 快手无水印下载工具KS-Downloader:专业级内容保存解决方案
  • vivo社区引入AVIF:图片体积降20%+,加载性能显著提升
  • 3步轻松搞定《恶霸鲁尼》闪退:从崩溃到流畅的完整优化指南
  • 5月7号
  • AI工具搭建自动化视频生成模型融合
  • 如何用桌面版客户端提升工作效率:Coolapk-UWP 桌面社区应用完全指南
  • Windows Terminal终极指南:7个命令行参数技巧让终端效率飙升
  • 内容创作团队借助多模型聚合平台批量生成与优化文案
  • 为什么macOS用户需要OpenMTP来突破Android文件传输瓶颈?
  • 激光
  • 别再只看LLM参数了!2026奇点大会颠覆性结论:AISMM才是下一代AI竞争力标尺(含11国基准值对照速查表)
  • Translumo终极指南:简单快速的免费屏幕实时翻译工具,畅玩外文游戏无障碍
  • 5分钟永久备份QQ空间所有历史记录:GetQzonehistory一站式数据备份解决方案
  • 终极免费方案:用NoFences彻底解决你的Windows桌面混乱问题
  • 终极指南:5分钟学会OBS AI背景移除,无需绿幕打造专业直播画面
  • 告别“卡脖子”与“水土不服”:五大中国CRM国产替代能力硬核测评 - 资讯焦点
  • 漫画数字阅读革命:Kindle Comic Converter完整使用指南
  • 手把手教你用Python实现GFP帧的CRC-16/XMODEM校验与加扰(附完整代码)
  • 在 OpenClaw Agent 工作流中接入 Taotoken 多模型能力
  • 怎样高效使用KCC漫画转换工具:实用操作指南让电子阅读器变身漫画书库
  • 3分钟搞定阅读APP书源:新手也能快速搭建个性化小说库
  • 个人/企业WordPress零基础建站流程 WordPress建站公司哪家好 - 麦麦唛
  • CloudCone VPS 内存不足导致进程被杀怎么调整 OOM killer
  • 2025年年度总结之25.教育之德智
  • AI智能体记忆系统构建:从向量检索到LangChain集成实践