Vijos1352 NOI2006 最大获利 最小权闭合图
Orz胡伯涛《最小割模型在信息学竞赛中的应用》
建图方法:
设立源点S和汇点T,S和用户(共M个)连边,载流量为满足其要求的获利
T和中转站(共N个)连边,载流量为建立该中转站的费用
每个用户向对应的2个中转站连边,载流量为inf
对该图跑一遍最大流,求出最小割f,(∑Ci)-f就是答案
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
;
;
const int inf=0x3f3f3f3f;
struct Edge
{
int to,next;
int capacity;
void assign(int t,int n,int c)
{ to=t; next=n; capacity=c; }
};
Edge elist[*maxE];
int head[maxV];
int ecnt;
void initEdge()
{
memset(head,-,sizeof(head));
ecnt=;
}
inline void addEdge(int from,int to,int capacity)
{
elist[ecnt].assign(to,head[from],capacity);
head[from]=ecnt++;
elist[ecnt].assign();
head[to]=ecnt++;
}
int N,M;
int tot;
int sink; //1~M:user M+1~N:station
void input()
{
scanf("%d%d",&N,&M);
initEdge();
sink=N+M+;
int cost;
;i<=N;i++)
{
scanf("%d",&cost);
addEdge(M+i,sink,cost);
}
tot=;
int v1,v2;
;i<=M;i++)
{
scanf("%d%d%d",&v1,&v2,&cost);
tot+=cost;
addEdge(i,M+v1,inf);
addEdge(i,M+v2,inf);
addEdge(,i,cost);
}
}
int layer[maxV];
std::queue<int> que;
bool bfs()
{
memset(layer,,sizeof(layer));
layer[]=;
que.push();
while(!que.empty())
{
int cur=que.front();
que.pop();
;e=elist[e].next)
{
int& to=elist[e].to;
int& cp=elist[e].capacity;
if(!layer[to] && cp)
{
layer[to]=layer[cur]+;
que.push(to);
}
}
}
return layer[sink];
}
int dfs(int cur,int flow)
{
if(cur==sink) return flow;
);
;e=elist[e].next)
{
int& to=elist[e].to;
int& cp=elist[e].capacity;
&& cp)
{
int tp=dfs(to,std::min(flow,cp));
res+=tp; flow-=tp;
elist[e].capacity-=tp;
elist[e^].capacity+=tp;
if(!flow) return res;
}
}
return res;
}
int dinic()
{
);
,inf);
return res;
}
int main()
{
input();
printf("%d\n",tot-dinic());
;
}
Vijos1352 NOI2006 最大获利 最小权闭合图的更多相关文章
- P4174 [NOI2006]最大获利 (最大权闭合子图)
P4174 [NOI2006]最大获利 (最大权闭合子图) 题目链接 题意 建\(i\)站台需要\(p_i\)的花费,当\(A_i,B_i\)都建立时获得\(C_i\)的利润,求最大的利润 思路 最大 ...
- BZOJ1497: [NOI2006]最大获利[最小割 最大闭合子图]
1497: [NOI2006]最大获利 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4375 Solved: 2142[Submit][Status] ...
- BZOJ 1497: [NOI2006]最大获利 最小割
1497: [NOI2006]最大获利 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1497 Description 新的技术正冲击着手 ...
- COGS28 [NOI2006] 最大获利[最大权闭合子图]
[NOI2006] 最大获利 ★★★☆ 输入文件:profit.in 输出文件:profit.out 简单对比时间限制:2 s 内存限制:512 MB [问题描述] 新的技术正冲击着手 ...
- 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割
[题意]给定n个点,点权为pi.m条边,边权为ci.选择一个点集的收益是在[点集中的边权和]-[点集点权和],求最大获利.n<=5000,m<=50000,0<=ci,pi<= ...
- BZOJ.1497.[NOI2006]最大获利(最小割 最大权闭合子图Dinic)
题目链接 //裸最大权闭合子图... #include<cstdio> #include<cctype> #include<algorithm> #define g ...
- 【BZOJ1497】[NOI2006]最大获利 最小割
裸的最小割,很经典的模型. 建图:要求总收益-总成本最大,那么将每条弧与源点相连,流量为成本,每个收益与汇点相连,流量为收益,然后每条弧与它所能到达的收益相连,流量为inf. 与源点相连的是未被选中的 ...
- BZOJ1497[NOI2006]最大获利——最大权闭合子图
题目描述 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成 ...
- bzoj1497 [NOI2006]最大获利 最大权闭合子图
链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1497 思路 最大权闭合子图的裸题 一开始知道是这个最大权闭合子图(虽然我不知道名字),但是我 ...
随机推荐
- 【转】Linux命令之查看文件占用空间大小-du,df
原文网址:http://blog.csdn.net/wangjunjun2008/article/details/19840671 du(disk usage),顾名思义,查看目录/文件占用空间大小 ...
- Java-Iterator的用法
迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的I ...
- jquery-pager分页
首先引用这三个文件 <script src="../../Scripts/jquery-1.4.4.min.js" type="text/javascript&qu ...
- unity3d ppsspp模拟器中的post processing shader在unity中使用
这个位置可以看到ppsspp的特殊处理文件位置来看看这些特效 用来测试的未加特效图片 ppsspp: 传说系列一生爱---英杰传说 最后的战士 aacolor 是关于饱和度,亮度,对比度,色调的调节, ...
- 【转】Markus Persson:Minecraft 游戏背后的奇才
转自酷勤网 Markus Persson是沙盒游戏Minecraft的开发者,在游戏中以Notch的名字为众多玩家所知,是游戏界绝对的巨星.美国<滚石>杂志的专栏作家David Peisn ...
- Linq中小心使用IndexOf
我们平常在做字符串的模糊查询时,有可能会用到下面的类似LINQ写法: string.IsNullOrEmpty(_SN) ? true : a.SN.IndexOf(_SN) != -1 这条 ...
- Oracle 插入超4000字节的CLOB字段的处理方法
最近在做系统开发的时候需要想Oracle数据库插入超过4000字节的CLOB字段,在网上查询了N久才发现下面的解决方案,故留存以备后查. 我们可以通过创建单独的OracleCommand来进行指定的插 ...
- Oracle表空间扩展
From:http://blog.csdn.net/starnight_cbj/article/details/7398153 1.查看所有表空间使用情况 select b.file_id 文件ID号 ...
- Space Ant - POJ 1696 (凸包)
题目大意:给一些散列点然后初始点是坐标最下面最左面的点,然后只能往左走,求出来最多可以经过多少个点,把序号输出出来. 分析:先求出来初始的点,然后不断排序找出来最近的凸点....复杂度是 n^2* ...
- linux —— 编译linux内核
目录: 0.测试环境 1.获得最新内核源代码 2.编译源代码 3.运行新的内核 0.测试环境: 我的系统 : ubuntu 16.04 LTS (内核版本:4.4.0-36-generic ...