noi2006day2_最大获利 网络流
这道题是上一题的数据加强版,dinic表示毫无压力;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<ctime>
#include<algorithm>
using namespace std;
const int maxn=;
const int inf=;
const int s=,t=;
struct node{
int y,next,flow,re;
}e[maxn*];
int linkk[maxn*],len=,n,m,w[maxn],sum=;
void print(int x){printf("%d\n",x);}
void print(int x,int y){printf("%d %d\n",x,y);}
void insert(int x,int y,int flow){
e[++len].y=y;e[len].flow=flow;
e[len].next=linkk[x];linkk[x]=len;e[len].re=len+;
e[++len].y=x;e[len].flow=;
e[len].next=linkk[y];linkk[y]=len;e[len].re=len-;
}
void init(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&w[i]);
int x,y,v;
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&v);sum+=v;
insert(s,i,v);insert(i,m+x,inf);insert(i,m+y,inf);
}
for(int i=;i<=n;i++)insert(m+i,t,w[i]);
}
int q[maxn],tail=,level[maxn],head=;
bool bfs(){
memset(level,-,sizeof(level));
head=;tail=;level[s]=;q[++tail]=s;
while(++head<=tail){
int x=q[head];
for(int i=linkk[x];i;i=e[i].next){
if(level[e[i].y]==-&&e[i].flow){
q[++tail]=e[i].y;
level[e[i].y]=level[x]+;
}
}
}
return level[t]>;
}
int find(int x,int flow){
if(x==t)return flow;
int maxflow=,d=;
for(int i=linkk[x];i&&maxflow<flow;i=e[i].next){
if(level[e[i].y]==level[x]+&&e[i].flow){
if(d=find(e[i].y,min(flow-maxflow,e[i].flow))){
maxflow+=d;
e[i].flow-=d;
e[e[i].re].flow+=d;
}
}
}
if(!maxflow)level[x]=-;
return maxflow;
}
void work(){
int d=,ans=;
while(bfs())
while(d=find(s,inf))
ans+=d;
cout<<sum-ans<<endl;
}
int main(){
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
init();
work();
}
noi2006day2_最大获利 网络流的更多相关文章
- BZOJ 1497 JZYZOJ 1344 [NOI2006]最大获利 网络流 最大权闭合图
http://www.lydsy.com/JudgeOnline/problem.php?id=1497 http://172.20.6.3/Problem_Show.asp?id=1344 思路 ...
- BZOJ 1497 [NOI2006]最大获利 ——网络流
[题目分析] 最大权闭合子图. S到集合1容量为获利的大小,集合2到T为所需要付出的相反数. 然后求出最大流,然后用总的获利相减即可. [代码] #include <cstdio> #in ...
- BZOJ1497 [NOI2006]最大获利 网络流 最小割 SAP
原文链接http://www.cnblogs.com/zhouzhendong/p/8371052.html 题目传送门 - BZOJ1497 题意概括 有n个站要被建立. 建立第i个站的花费为pi. ...
- [bzoj1497][NOI2006]最大获利_网络流_最小割
最大获利 bzoj-1497 题目大意:可以建立一个点,花费一定的代价:将已经建立的两个点之间连边,得到一定收益.有些节点之间是不允许连边的. 注释:1<=点数<=5,000,1<= ...
- 【BZOJ1497】【NOI2006】最大获利(网络流)
[BZOJ1497][NOI2006]最大获利(网络流) 题面 BZOJ Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS& ...
- 网络流(最大流):COGS 28 [NOI2006] 最大获利
28. [NOI2006] 最大获利 ★★★☆ 输入文件:profit.in 输出文件:profit.out 简单对比 时间限制:2 s 内存限制:512 MB [问题描述] 新的技术 ...
- P4174 [NOI2006]最大获利(网络流)
P4174 [NOI2006]最大获利 还是最大权闭合子图的题 对于每个中转站$k$:$link(k,T,P_k)$ 对于每个用户$i$.中转站$A_i,B_i$.贡献$C_i$ $link(S,i, ...
- Bzoj1497 [NOI2006]最大获利
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4449 Solved: 2181 Description 新的技术正冲击着手机通讯市场,对于各大运营商来 ...
- 最大权闭合图 && 【BZOJ】1497: [NOI2006]最大获利
http://www.lydsy.com/JudgeOnline/problem.php?id=1497 最大权闭合图详细请看胡伯涛论文<最小割模型在信息学竞赛中的应用>,我在这里截图它的 ...
随机推荐
- php读取excel文件 更新修改excel
php读取excel文件示例,还有更新修改功能. 代码: //模板存放目录 $dir = $DOCUMENT_ROOT.'/backoffice/admin/oemcheck/'; $template ...
- 利用java读写Excel文件
一.读取Excel文件内容 java 代码 public static String readExcel(File file){ StringBuffer sb = new StringBuffer( ...
- ajax使用。
<script> function createAjax(){ var request=false; //window对象中有XMLHttpRequest存在就是非IE,包括(IE7,IE ...
- 第二十二章 数据访问(In .net4.5) 之 集合
1. 概述 本章内容包括 .net平台中的集合.如何选择集合 以及 如何实现自定义集合. 2. 主要内容 2.1 使用数组(Array) ]; ; x < arrayOfInt.Length; ...
- pure的bug记录2
<select id="stacked-state" style=" font-family: "Microsoft YaHei"; " ...
- rails bug
variable @fontAwesomeEotPath_iefix is undefined rails generate bootstrap:install如果还有错,保证在加载主提之前impor ...
- spring 基本操作总结主要是aop以及依赖注入的基本配置
一所需架包 spring commom-logging.jar spring.jar 注解 common-annotation.jar aop面向切面 aspectjrt.jar aspect ...
- <转载>编程珠玑-位排序(bitsort)
转载:http://www.cnblogs.com/shuaiwhu/archive/2011/05/29/2065039.html 维护版权 在<编程珠玑>一书上,有一题是将一堆不 ...
- C++中int *p[4]和 int (*q)[4]的区别
这俩兄弟长得实在太像,以至于经常让人混淆.然而细心领会和甄别就会发现它们大有不同. 前者是指针数组,后者是指向数组的指针.更详细地说. 前: 指针数组;是一个元素全为指针的数组.后: 数组指针;可以直 ...
- TextSwitcher,译为文字转换器控件
ViewSwitcher仅仅包含子类型TextView.TextSwitcher被用来使屏幕上的label产生动画效果.每当setText(CharSequence)被调用时,TextSwitcher ...