【模板】最大权闭合图

ACM模板


目录

      • 概念
      • 建图
      • 证明
      • 模板题

概念

闭合图中所有的点的出边必须指向内部的点

建图

原图的边在网络流中的边容量是INF,如果点权是正,那么源点向其连边,容量是点权;否则它向汇点连边,容量是点权绝对值

证明

考虑最小割 [S,T][S,T][S,T],所求的满足条件的闭合子图为V1V_1V1

S=V1∪{s}S=V_1\cup \{ s \}S=V1{s}T=V2∪{t}T=V_2\cup \{t \}T=V2{t},其中V2=V−V1V_2=V-V_1V2=VV1
c[S,T]=∑v∈V2+wv+∑v∈V1−(−wv)c[S,T]=\sum_{v\in V_2^+}w_v+\sum_{v\in V_1^-}(-w_v)c[S,T]=vV2+wv+vV1(wv)

而闭合子图的权值为
W(V1)=∑v∈V1+wv+∑v∈V1−wv=∑v∈V1+wv−∑v∈V1−(−wv)W(V_1)=\sum_{v\in V_1^+}w_v+\sum_{v\in V_1^-}w_v=\sum_{v\in V_1^+}w_v-\sum_{v\in V_1^-}(-w_v)W(V1)=vV1+wv+vV1wv=vV1+wvvV1(wv)

于是有
c[S,T]+W(V1)=∑v∈V1+wv+∑v∈V2+wv=∑v∈V+wvc[S,T]+W(V_1)=\sum_{v\in V_1^+}w_v+\sum_{v\in V_2^+}w_v=\sum_{v\in V^+}w_vc[S,T]+W(V1)=vV1+wv+vV2+wv=vV+wv


W(V1)=∑v∈V+wv−c[S,T]W(V_1)=\sum_{v\in V^+}w_v-c[S,T]W(V1)=vV+wvc[S,T]

模板题

最大获利

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=55010,M=6*N,INF=0x3f3f3f3f;
int n,m;
int h[N],e[M],ne[M],f[M],idx;
int S,T,d[N],q[N],cur[N];
void add(int a,int b,int c)
{e[idx]=b,ne[idx]=h[a],f[idx]=c,h[a]=idx++;e[idx]=a,ne[idx]=h[b],f[idx]=0,h[b]=idx++;
}
bool bfs()
{memset(d,-1,sizeof d);int tt=0,hh=0;q[S]=0,cur[S]=h[S],d[S]=0;while(hh<=tt){int t=q[hh++];for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(d[j]==-1&&f[i]){d[j]=d[t]+1;cur[j]=h[j];if(j==T) return 1;q[++tt]=j;}}}return 0;
}
int dfs(int u=S,int flow=INF)
{if(u==T) return flow;int rmn=flow;for(int i=cur[u];i!=-1&&rmn;i=ne[i]){cur[u]=i;int j=e[i];if(d[j]==d[u]+1&&f[i]){int t=dfs(j,min(f[i],rmn));if(!t) d[j]=-1;f[i]-=t,f[i^1]+=t,rmn-=t;}}return flow-rmn;
}
int dinic()
{int r=0;while(bfs()) r+=dfs();return r;
}
int main()
{cin>>n>>m;memset(h,-1,sizeof h);S=0,T=n+m+1;int s=0;for(int i=1;i<=n;i++){int p;cin>>p; add(i,T,p);}for(int i=1;i<=m;i++){int a,b,c;cin>>a>>b>>c;add(i+n,a,INF),add(i+n,b,INF);add(S,i+n,c);s+=c;}cout<<s-dinic()<<'\n';return 0;
}

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

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

相关文章

P4707-重返现世【dp,数学期望,扩展min-max容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P4707 题目大意 nnn个物品&#xff0c;每次生成一种物品&#xff0c;第iii个被生成的概率是pim\frac{p_i}{m}mpi​​&#xff0c;求生成至少kkk种物品的期望次数。 1≤n≤1000,max{n−10,1}≤k≤n,1≤m≤100001\leq n\leq 100…

手把手教你写DI_3_小白徒手支持 Singleton 和 Scoped 生命周期

在上一节&#xff1a;手把手教你写DI_2_小白徒手撸构造函数注入浑身绷带的小白同学&#xff1a;我们继续开展我们的工作&#xff0c;大家都知道 Singleton是什么&#xff0c;就是全局只有一个呗&#xff0c;我们就先从它开始&#xff0c;这个多简单&#xff0c;我们找个字典放这…

监视任务

来源&#xff1a;牛客网 &#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld 题目描述 &#x1d445;&#x1d452;&#x1d458;&#x1d456;在课余会接受一些民间的鹰眼…

【模板】最大密度子图

ACM模板 目录概念做法例题概念 选择一个子图G′(V′,E′)G(V,E)G′(V′,E′)&#xff0c;其中对于任意一条边的两个端点必须在所选的点集中&#xff0c;最大化∣E′∣∣V′∣\frac{|E|}{|V|}∣V′∣∣E′∣​ 做法 利用01分数规划二分即最大化 ∣E′∣−g∣V′∣|E|-g|V|∣E…

牛客练习赛79E-小G的数学难题【dp,单调队列】

正题 题目链接:https://ac.nowcoder.com/acm/contest/11169/E 题目大意 给出nnn个三元组(ai,bi,ci)(a_i,b_i,c_i)(ai​,bi​,ci​)。 要求选出一个集合SSS&#xff0c;要求 (∑i∈Sai)≤P,(∑i∈Sbi)≥P\left(\sum_{i\in S}a_i\right)\leq P,\left(\sum_{i\in S}b_i\right)\…

手把手教你写DI_2_小白徒手撸构造函数注入

在上一节&#xff1a;手把手教你写DI_1_DI框架有什么&#xff1f;我们已经知道我们要撸哪些东西了那么我们开始动工吧&#xff0c;这里呢&#xff0c;我们找小白同学来表演下小白同学 &#xff1a;我们先定义一下我们的广告招聘纸有什么&#xff1a;好&#xff0c;我们实现两种…

E. Pattern Matching(题意理解+拓扑排序)

E. Pattern Matching 首先p[mtj]p[mt_j]p[mtj​]必须能够匹配所给字符sjs_jsj​&#xff0c;然后把所有能够匹配的sjs_jsj​的其他模板串也找出来&#xff0c;这些必须放在p[mtj]p[mt_j]p[mtj​]的后面&#xff0c;典型拓扑排序&#xff0c;连边然后排序即可 #define IO ios:…

Sum

链接&#xff1a;https://ac.nowcoder.com/acm/problem/14269 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld 题目描述 考虑维护一个这样的问题&#xff1a…

NOI.AC#2266-Bacteria【根号分治,倍增】

正题 题目链接:http://noi.ac/problem/2266 题目大意 给出nnn个点的一棵树&#xff0c;有一些边上有中转站&#xff08;边长度为222&#xff0c;中间有一个中转站&#xff09;&#xff0c;否则就是边长为111。 mmm次询问一个东西从xxx出发走到yyy&#xff0c;每隔kkk步中转站…

服务器win2008 R2 x64 部署ASP.net core到IIS 并解决 HTTP Error 502.5 的问题

1、发布网站 &#xff1b;2、安装 vc_redist.x64 (Visual C Redistributable for Visual Studio 2015) 新装的系统没装的补丁&#xff0c;装过略过&#xff1b;3、安装WindowsHosting &#xff1a;如&#xff1a; dotnet-hosting-2.1.3-win &#xff1b;4、安装.Net Core SDK&…

codeforces1271 D. Portals(dp or 带悔贪心)

D. Portals 由于每个点可以选择前面的某些点存在重复选择的情况&#xff0c;考虑除去重复选择的可能。 贪心&#xff1a;对于每一个城堡&#xff0c;我们都尽可能在最晚的时间控制&#xff0c;也就是在最后一个能控制它的点考虑是否控制。 于是考虑设计dp 状态表示&#xf…

P3337-[ZJOI2013]防守战线【单纯形】

正题 题目链接:https://www.luogu.com.cn/problem/P3337 题目大意 nnn个地方可以建立塔也可以不建立塔&#xff0c;第iii个位置建立需要消耗CiC_iCi​元 mmm个限制要求在某个区间内的塔的数量超过DiD_iDi​ 1≤n≤1000,1≤m≤100001\leq n\leq 1000,1\leq m\leq 100001≤n≤10…

Data Structure Problem

试题链接 题目描述 题意&#xff1a; 有两个序列&#xff0c; 操作1是将a序列的第x位改成y 操作2是将b序列的第x位改成y 操作3是找到一个cx&#xff0c;满足递推式c00&#xff0c;ci max(ci-1bi&#xff0c;ai) 题解&#xff1a; 官方题解 说实话我没大看懂。。。 题是我同…

定制Ocelot来满足需求

这篇文章&#xff0c;我们将从Ocelot的中间件源码分析&#xff0c;目前Ocelot已经实现那些功能&#xff0c;还有那些功能在我们实际项目中暂时还未实现&#xff0c;如果我们要使用这些功能&#xff0c;应该如何改造等方面来说明。一、Ocelot源码解读在使用一个组件前&#xff0…

codeforces1151 E. Number of Components(计数)

E. Number of Components 方法一&#xff1a;考虑每个点的贡献&#xff0c;认为一个联通块里让编号最大的点产生贡献 那么&#xff0c;对于一个点 iii&#xff0c;如果对答案产生贡献&#xff0c;一定要点 iii 存在&#xff0c;而点 i1i 1i1 不存在。 #define IO ios::sync_…

P2490-[SDOI2011]黑白棋【博弈论,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P2490 题目大意 一个长度为nnn的棋盘上放下kkk个棋子。 第一个要是白色&#xff0c;下一个要是黑色&#xff0c;在下一个是白色以此类推。 先手操控白&#xff0c;后手操控黑。白色只能往右&#xff0c;黑色只能往左。每次…

【.NET Core项目实战-统一认证平台】第一章 功能及架构分析

从本文开始&#xff0c;我们正式进入项目研发阶段&#xff0c;首先我们分析下统一认证平台应该具备哪些功能性需求和非功能性需求&#xff0c;在梳理完这些需求后&#xff0c;设计好系统采用的架构来满足已有的需求和未来的扩展应用。1 功能性需求统一认证平台应该具备以下基本…

Shift and Reverse

题目链接 题意&#xff1a; 一个序列a1&#xff0c;a2&#xff0c;a3…an 选择一个i&#xff0c;然后将序列改成ai,ai-1,…a1,an,an-1,…ai1 可以进行无数次这样的操作 问&#xff1a;最多有多少不同的序列产生&#xff1f;&#xff08;答案mod1e97&#xff09; 题解&#xf…

UOJ#33-[UR #2]树上GCD【长链剖分,根号分治】

正题 题目链接:https://uoj.ac/problem/33 题目大意 给出nnn个点的一棵树 定义f(x,y)gcd(dis(x,lca),dis(y,lca))f(x,y)gcd(\ dis(x,lca),dis(y,lca)\ )f(x,y)gcd( dis(x,lca),dis(y,lca) )。 对于每个iii求有多少对f(x,y)i(x<y)f(x,y)i(x<y)f(x,y)i(x<y) 1≤n≤1…

codeforces1167 E. Range Deleting(双指针)

E. Range Deleting 首先不难知道如果f(l,r)f(l,r)f(l,r)满足题意&#xff0c;那么f(l,r1),f(l,r2),…,f(l,x)f(l,r1),f(l,r2),\dots,f(l,x)f(l,r1),f(l,r2),…,f(l,x)都满足题意。 因而对于每一个左端点lll&#xff0c;需要找到最小的一个右端点rrr 单调性&#xff1a;对于每…