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 最大获利 最小权闭合图的更多相关文章

  1. P4174 [NOI2006]最大获利 (最大权闭合子图)

    P4174 [NOI2006]最大获利 (最大权闭合子图) 题目链接 题意 建\(i\)站台需要\(p_i\)的花费,当\(A_i,B_i\)都建立时获得\(C_i\)的利润,求最大的利润 思路 最大 ...

  2. BZOJ1497: [NOI2006]最大获利[最小割 最大闭合子图]

    1497: [NOI2006]最大获利 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 4375  Solved: 2142[Submit][Status] ...

  3. BZOJ 1497: [NOI2006]最大获利 最小割

    1497: [NOI2006]最大获利 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1497 Description 新的技术正冲击着手 ...

  4. COGS28 [NOI2006] 最大获利[最大权闭合子图]

    [NOI2006] 最大获利 ★★★☆   输入文件:profit.in   输出文件:profit.out   简单对比时间限制:2 s   内存限制:512 MB [问题描述] 新的技术正冲击着手 ...

  5. 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割

    [题意]给定n个点,点权为pi.m条边,边权为ci.选择一个点集的收益是在[点集中的边权和]-[点集点权和],求最大获利.n<=5000,m<=50000,0<=ci,pi<= ...

  6. BZOJ.1497.[NOI2006]最大获利(最小割 最大权闭合子图Dinic)

    题目链接 //裸最大权闭合子图... #include<cstdio> #include<cctype> #include<algorithm> #define g ...

  7. 【BZOJ1497】[NOI2006]最大获利 最小割

    裸的最小割,很经典的模型. 建图:要求总收益-总成本最大,那么将每条弧与源点相连,流量为成本,每个收益与汇点相连,流量为收益,然后每条弧与它所能到达的收益相连,流量为inf. 与源点相连的是未被选中的 ...

  8. BZOJ1497[NOI2006]最大获利——最大权闭合子图

    题目描述 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成 ...

  9. bzoj1497 [NOI2006]最大获利 最大权闭合子图

    链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1497 思路 最大权闭合子图的裸题 一开始知道是这个最大权闭合子图(虽然我不知道名字),但是我 ...

随机推荐

  1. poj 3465 Corn Fields 状态压缩

    题目链接:http://poj.org/problem?id=3254 #include <cstdio> #include <cstring> #include <io ...

  2. OpenCV 中 IplImage、CvMat、Mat中的type是怎么回事?

    在使用opencv的过程中,无论使用原始的IplImage和CvMat类型,还是用最新C++版本的Mat类型,在创建和使用过程中,经常会遇到CV_8UC1.CV_8UC3.CV_32FC3等声明,我以 ...

  3. 自己生成非官方iPhone toolchain的头文件

    如果你已经搭建好非官方iPhone toolchain开发包,如果缺少某些头文件,可以用以下方法自己生成. 首先下载class-dump: http://www.codethecode.com/pro ...

  4. Apple Pay强势来袭,开发者应做的事情

    "iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...

  5. 什么是VPN?

    VPN----虚拟专用网络 虚拟专用网络的功能:在公用网络上建立专用网络,进行加密通讯.在企业网络汇总有广泛应用.vpn网关通过对数据包的加密和数据包目标地址的转换事项远程访问.vpn有多种分类方式, ...

  6. OS开发网络篇—监测网络状态

    iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行 ...

  7. [AngularJS + Webpack] ES6 with BabelJS

    Install: npm install --save-dev babel-loader webpack.config.js: Add module, tell webpack to find all ...

  8. AndroidStudio 快捷键使用

    经常使用快捷键使用搜集 1. Ctrl+D: 集合了复制和粘贴两个操作,假设有选中的部分就复制选中的部分.并在选中部分的后面粘贴出来,假设没有选中的部分.就复制光标所在的行.并在此行的以下粘贴出来. ...

  9. android 15 activity跳转

    从一个屏幕跳到另一个屏幕,一个activity跳转到另一个activity,Intent类用于组件之间传递数据和跳转,组件包括不仅activity. package com.sxt.day04_01; ...

  10. apache配置php

    第一部分:安装apache 1 .安装apache软件,custom 选全部,安装目录为: F:\Apache2.2\ 2.默认为80端口(如冲突,要学会修改端口) 输入:http://localho ...