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

BZOJ1497 最大获利

目录

  • BZOJ1497 最大获利
  • 题解
  • code

BZOJ1497 最大获利

题目传送门

题解

比较容易想到的一道网络流。从源点向每一个中转站连一条流量为\(Pi\)的边,从每个中转站向其对应的消费人群连一条流量为\(inf\)的边,从每个消费人群向汇点连一条流量为\(Ci\)的边。然后就转化成了最小割的问题了。由于中间消费人群与中转站的边流量是\(inf\),所以是不会割这条边的。而割左右两边的边就代表放弃这种方案,最后用\(\sum_{i=1}^n z[i]\)减去最小割的值就是最大的获利了。

code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool Finish_read;
template<class T>inline void read(T &x){Finish_read=0;x=0;int f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;if(ch==EOF)return;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();x*=f;Finish_read=1;}
template<class T>inline void print(T x){if(x/10!=0)print(x/10);putchar(x%10+'0');}
template<class T>inline void writeln(T x){if(x<0)putchar('-');x=abs(x);print(x);putchar('\n');}
template<class T>inline void write(T x){if(x<0)putchar('-');x=abs(x);print(x);}
/*================Header Template==============*/
const int maxn=1e5+500;
const int inf=1e9+7;
#define PAUSE printf("Press Enter key to continue..."); fgetc(stdin);
int n,m,tot=1;
struct edge {
    int to,nxt,v;
}E[maxn<<2];
int head[maxn],dis[maxn];
int S,T;
/*==================Define Area================*/
void addedge(int u,int v,int w) {
    E[++tot].to=v;E[tot].nxt=head[u];head[u]=tot;E[tot].v=w;
    E[++tot].to=u;E[tot].nxt=head[v];head[v]=tot;E[tot].v=0;
}

bool bfs() {
    memset(dis,-1,sizeof dis);
    queue<int>Q;
    while(!Q.empty()) Q.pop();
    Q.push(S);
    dis[S]=0;
    while(!Q.empty()) {
        int o=Q.front();Q.pop();
        for(int i=head[o];~i;i=E[i].nxt) {
            int to=E[i].to;
            if(dis[to]==-1&&E[i].v) {
                dis[to]=dis[o]+1;
                Q.push(to);
            }
        }
    }
    return dis[T]!=-1;  
}

int dfs(int u,int flow) {
    if(u==T) return flow;
    int used=0,k;
    for(int i=head[u];~i;i=E[i].nxt) {
        int to=E[i].to;
        if(dis[to]==dis[u]+1&&E[i].v) {
            k=dfs(to,min(E[i].v,flow-used));
            E[i].v-=k;
            E[i^1].v+=k;
            used+=k;
            if(used==flow) return flow;
        }
    }
    if(!used) dis[u]=-1;
    return used;
}

int main() {
    memset(head,-1,sizeof head);
    read(n);read(m);
    S=0,T=n+m+1;
    for(int i=1,x;i<=n;i++) {
        read(x);
        addedge(S,i,x);
    }
    int ans=0;
    for(int i=1,x,y,z;i<=m;i++) {
        read(x);read(y);read(z);
        addedge(x,n+i,inf);addedge(y,n+i,inf);
        addedge(n+i,T,z);
        ans+=z;
    }
    while(bfs()) {
        ans-=dfs(S,inf);
    }
    printf("%d\n",ans);
    return 0; 
}

转载于:https://www.cnblogs.com/Apocrypha/p/9432850.html

相关文章:

  • 探秘varian:优雅的发布部署程序
  • 论“小猪佩奇如何从营销到吸金一路开挂前行”!
  • 使用mysqldump 备份 恢复从库报错解决方案(ERROR 1872)
  • Jquery mobiscroll 移动设备(手机)wap日期时间选择插件以及滑动、滚动插件
  • 动画小记——点击头像逐渐放大
  • Tuxera NTFS for Mac 拼团仅需¥99!再见原价¥298!
  • 什么样的项目适合自动化测试
  • leetcode-27. Remove Element
  • Spark进阶之路-Spark提交Jar包执行
  • 算法与数据结构1800题 数组和广义表(一)
  • JavaScript 函数式编程(二)
  • volatile 可见性的模拟分析示例
  • 管理微服务中的数据
  • bzoj 2002 弹飞绵羊 lct裸题
  • 【c学习-3】
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2018一半小结一波
  • Computed property XXX was assigned to but it has no setter
  • Git的一些常用操作
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java多线程(4):使用线程池执行定时任务
  • jquery cookie
  • js如何打印object对象
  • JS实现简单的MVC模式开发小游戏
  • Linux Process Manage
  • Node 版本管理
  • Odoo domain写法及运用
  • Phpstorm怎样批量删除空行?
  • use Google search engine
  • Vue 重置组件到初始状态
  • 动态魔术使用DBMS_SQL
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 目录与文件属性:编写ls
  • 区块链将重新定义世界
  • 我看到的前端
  • NLPIR智能语义技术让大数据挖掘更简单
  • 积累各种好的链接
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (二)JAVA使用POI操作excel
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (九)信息融合方式简介
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .naturalWidth 和naturalHeight属性,
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET大文件上传知识整理
  • /boot 内存空间不够
  • @ModelAttribute使用详解
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [16/N]论得趣