P4174 [NOI2006]最大获利 (最大权闭合子图)
P4174 [NOI2006]最大获利 (最大权闭合子图)
题意
建\(i\)站台需要\(p_i\)的花费,当\(A_i,B_i\)都建立时获得\(C_i\)的利润,求最大的利润
思路
最大权闭合子图模板题
参考论文
将所有站台与S连接,边权值为\(P_i\),将第\(i\)个利润与\(T\)连接,边权为\(C_i\),再与\(A_i,B_i\)连接,边权为\(inf\),跑网络流,最小割 = 建立站台的花费 + 不要的利润 ,Ans = 所有的利润 - (建立站台的花费 + 不要的利润) = 所有的利润 - 最小割
最小割 = 最大流
样例图

代码
#include <bits/stdc++.h>
using namespace std;
const int inf = 1<<30;
const int N = 55500;
const int M = 502020;
int f[N], w[M], nxt[M], to[M], h[N];
int num;
void add(int x,int y,int z)
{
to[++num] = y;
w[num] = z;
nxt[num] = f[x];
f[x] = num;
to[++num] = x;
w[num] = 0;
nxt[num] = f[y];
f[y] = num;
}
int bfs(int s,int t)
{
memset(h,0,sizeof(h));
h[s] = 1;
queue <int > q;
q.push(s);
while (!q.empty())
{
int x = q.front();
q.pop();
for (int i = f[x]; i; i = nxt[i])
{
int y = to[i];
if (!h[y] && w[i])
{
h[y] = h[x] + 1;
q.push(y);
}
}
}
if (!h[t] ) return 0;
else return 1;
}
int dfs(int x,int t,int flow)
{
if(x==t) return flow;
int fl=0;
for(int i=f[x]; i && flow ;i=nxt[i])
{
if(h[to[i]]==h[x]+1&&w[i])
{
int mi=dfs(to[i],t,min(w[i],flow));
w[i]-=mi; w[i^1]+=mi; fl+=mi; flow-=mi;
}
}
if(!fl) h[x]=-1;
return fl;
}
long long dinic(int s,int t)
{
long long ret = 0;
while (bfs(s,t)) ret += dfs(s,t,inf);
return ret;
}
int main()
{
ios::sync_with_stdio(false);
int n,m;
cin >> n >> m;
num = 1;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
add(0,i,x);
}
long long tot = 0;
for (int i = 1; i <= m; i++)
{
int x, y, z;
cin >> x >> y >> z;
tot += z;
add(x,i+n,inf);
add(y,i+n,inf);
add(i+n,m+n+1,z);
}
cout << tot - dinic(0,n+m+1) << endl;
}
P4174 [NOI2006]最大获利 (最大权闭合子图)的更多相关文章
- BZOJ1497[NOI2006]最大获利——最大权闭合子图
题目描述 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成 ...
- 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割
[题意]给定n个点,点权为pi.m条边,边权为ci.选择一个点集的收益是在[点集中的边权和]-[点集点权和],求最大获利.n<=5000,m<=50000,0<=ci,pi<= ...
- bzoj1497 [NOI2006]最大获利 最大权闭合子图
链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1497 思路 最大权闭合子图的裸题 一开始知道是这个最大权闭合子图(虽然我不知道名字),但是我 ...
- COGS28 [NOI2006] 最大获利[最大权闭合子图]
[NOI2006] 最大获利 ★★★☆ 输入文件:profit.in 输出文件:profit.out 简单对比时间限制:2 s 内存限制:512 MB [问题描述] 新的技术正冲击着手 ...
- bzoj1497 最大获利(最大权闭合子图)
题目链接 思路 对于每个中转站向\(T\)连一条权值为建这个中转站代价的边.割掉这条边表示会建这个中转站. 对于每个人向他的两个中转站连一条权值为\(INF\)的边.然后从\(S\)向这个人连一条权值 ...
- BZOJ 1497 最大获利(最大权闭合子图)
http://www.lydsy.com/JudgeOnline/problem.php?id=1497 思路:由题意可以得知,每个顾客都依赖2个中转站,那么让中转站连有向边到汇点,流量为它的建设费用 ...
- 洛谷 P4174 [NOI2006]最大获利 && 洛谷 P2762 太空飞行计划问题 (最大权闭合子图 && 最小割输出任意一组方案)
https://www.luogu.org/problemnew/show/P4174 最大权闭合子图的模板 每个通讯站建一个点,点权为-Pi:每个用户建一个点,点权为Ci,分别向Ai和Bi对应的点连 ...
- BZOJ 1497: [NOI2006]最大获利(最大权闭合子图)
1497: [NOI2006]最大获利 Time Limit: 5 Sec Memory Limit: 64 MB Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机 ...
- luogu p4174 最大获利(最大权闭合子图)
luogu p4174 最大获利(最大权闭合子图) 给定n个点,m条边,每条边有一个贡献,每个点有一个代价.选择一条边,会付出边所连两个点的代价,问最大代价. 我们换个建图方式:把图G中的边\(e_i ...
随机推荐
- spring cloud微服务快速教程之(六) 应用监控 spring boot admin
0-前言 当我们发布了微服务后,我们希望对各个应用的各个运行状况进行一个监控:这个时候spring boot admin,就出场了: spring boot admin:是一个监控和管理spring ...
- git命令的基本使用流程
git命令的基本使用流程 前提:已经基本熟悉git的常用命令 1.提交项目 首先,在对项目进行完善后,如果想要将项目更新到github或是阿里code上去,先要使用 git add -A 这一命令的作 ...
- Spring MVC系列之模型绑定(SpringBoot)(七)
前言 上一节我们在SpringBoot中启用了Spring MVC最终输出了HelloWorld,本节我们来讲讲Spring MVC中的模型绑定,这个名称来源于.NET或.NET Core,不知是否恰 ...
- 【python小随笔】动态创建变量名
PS:有时候我们不知道列表组数里存放几个值,但是又要动态的遍历这些值并且动态的创建每一个对应的一个变量里: t = ['B0716PK6R2','B077X9J24C','B01N2SBH4J'] c ...
- cogs 1829. [Tyvj 1728]普通平衡树 权值线段树
1829. [Tyvj 1728]普通平衡树 ★★★ 输入文件:phs.in 输出文件:phs.out 简单对比时间限制:1 s 内存限制:1000 MB [题目描述] 您需要写一种数 ...
- document.visibilityState 监听浏览器
document.hidden:表示页面是否隐藏的布尔值.页面隐藏包括 页面在后台标签页中 或者 浏览器最小化 (注意,页面被其他软件遮盖并不算隐藏,比如打开的 sublime 遮住了浏览器). do ...
- HTTP图解笔记(一)—— 第1章 了解Web及网络基础
TCP/IP协议族 网络是在TCP/IP协议族的基础上运作的,HTTP是一个子集 OSI四层: 应用层:通用的应用服务协议,FTP.DNS.HTTP ↓ 传输层:提供计算机之间的数据传输,TCP.UD ...
- AVR单片机教程——PWM调光
本文隶属于AVR单片机教程系列. PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比.让引脚输出高电平点亮LED,占空比就是100%. 在驱动数码管时 ...
- msi通过powershell安装、卸载
function install_msi($url) { $telemetry = @{ DisplayName = "Telemetry Service"; filename = ...
- mysql 注入问题
1.实质 MySql语句是用户自行拼接的字符串 2.例子 import pymysql # 获取用户输入信息 username = input("请输入用户名:") pwd = i ...