题意:

现在有这么一个m人的团伙,也想来一次环游世界。 他们打算兵分多路,游遍每一个国家。
    因为他们主要分布在东方,所以他们只朝西方进军。设从东方到西方的每一个国家的编号依次为1...N。假若第i个人的游历路线为P1、P2......Pk(0≤k≤N),则P1<P2<......<Pk。
    众所周知,中国相当美丽,这样在环游世界时就有很多人经过中国。我们用一个正整数Vi来描述一个国家的吸引程度,Vi值越大表示该国家越有吸引力,同时也表示有且仅有Vi个人会经过那一个国家。
    为了节省时间,他们打算通过坐飞机来完成环游世界的任务。同时为了省钱,他们希望总的机票费最小。
1<= N < =100 ,1<= M <= 79

分析:

  又一次用到了我们强大的拆点大法。

  我们把每个国家i拆点,拆成入点和出点,入点向出点连上下界均为Vi,表示这个国家有且仅有Vi个人经过。

  建立一个中转节点s,从源点S向s点连上界为m下界为0的边,代表总人数,然后从s点向每个国家的入点连容量无限的边,然后每个国家的出点向T点连容量无限的边。

  以上所有边费用都为0.

  接下来,如果i到j有航线,那么就从i的出点到j的入点连流量无限费用为机票价格的边。

  最后按照可行流建边,跑最小费用最大流即可。

代码:

 #include<bits/stdc++.h>
using namespace std;int S,T,tot=;
const int N=,M=,inf=0x3f3f3f3f;
struct node{int y,f,c,nxt;}e[M];int c=,v[N];
int h[N],q[M],d[N],n,m,s,t,pre[N];bool vis[N];
void add(int x,int y,int z,int w){
e[++c]=(node){y,z,w,h[x]};h[x]=c;
e[++c]=(node){x,,-w,h[y]};h[y]=c;
} bool spfa(){
for(int i=;i<=T;i++) d[i]=inf;
int l=,r=;q[++r]=S;vis[S]=;d[S]=;
while(l<=r){
int x=q[l++];vis[x]=;
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]>d[x]+e[i].c&&e[i].f){
d[y]=d[x]+e[i].c;pre[y]=i;
if(!vis[y]) q[++r]=y,vis[y]=;
}
} return (d[T]!=inf);
} void aug(){ int x=inf;
for(int i=pre[T];i;i=pre[e[i^].y])
x=min(x,e[i].f);
for(int i=pre[T];i;i=pre[e[i^].y])
tot+=x*e[i].c,e[i].f-=x,e[i^].f+=x;
} int main(){
scanf("%d%d",&n,&m);s=;
S=,T=;add(S,s,m,);
for(int i=,x;i<=n;i++)
scanf("%d",&x),add(s,i,inf,),
v[i]-=x,v[i+n]+=x;
for(int i=;i<=n;i++)
for(int j=i+,x;j<=n;j++){
scanf("%d",&x);
if(~x) add(i+n,j,inf,x);
} for(int i=;i<=n*;i++)
v[i]>?add(S,i,v[i],):
(v[i]?add(i,T,-v[i],):(void));
while(spfa()) aug();
printf("%d\n",tot);return ;
}

有上下界最小费用可行流

BZOJ 2055 80人环游世界 有上下界最小费用可行流的更多相关文章

  1. [BZOJ2055]80人环游世界 有上下界最小费用最大流

    2055: 80人环游世界 Time Limit: 10 Sec  Memory Limit: 64 MB Description     想必大家都看过成龙大哥的<80天环游世界>,里面 ...

  2. BZOJ 2055: 80人环游世界(有上下界的费用流)

    题面 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 693 Solved: 434 [Submit][Status][Discuss] Descript ...

  3. BZOJ 3876 支线剧情 有源汇有上下界最小费用可行流

    题意: 给定一张拓扑图,每条边有边权,每次只能从第一个点出发沿着拓扑图走一条路径,求遍历所有边所需要的最小边权和 分析: 这道题乍一看,可能会想到什么最小链覆盖之类的,但是仔细一想,会发现不行,一是因 ...

  4. bzoj 2055 80人环游世界

    有源汇上下界最小费用可行流. 将每个国家拆点. 源点向一个新建节点连一条上界为总人数下界为0费用为0的边. 新建节点向每个国家的入点连一条上界为正无穷下界为0费用为0的边. 每个国家的入点向出点连一条 ...

  5. BZOJ 2055: 80人环游世界 [上下界费用流]

    2055: 80人环游世界 题意:n个点带权图,选出m条路径,每个点经过val[i]次,求最小花费 建图比较简单 s拆点限制流量m 一个点拆成两个,限制流量val[i],需要用上下界 图中有边的连边, ...

  6. bzoj 2055: 80人环游世界 -- 上下界网络流

    2055: 80人环游世界 Time Limit: 10 Sec  Memory Limit: 64 MB Description     想必大家都看过成龙大哥的<80天环游世界>,里面 ...

  7. 【BZOJ2055】80人环游世界 有上下界费用流

    [BZOJ2055]80人环游世界 Description     想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么     一个 ...

  8. P4553 80人环游世界(上下界费用流)

    P4553 80人环游世界 emm......先从上下界网络流(转)开始 再到现在的上下界费用流 因为有上下界,我们需要记下每个点的流量差$ex[i]$,用于调整 $ins(x,y,l,r,v)=li ...

  9. bzoj 2055: 80人环游世界【有上下界有源汇最小费用最大流】

    连有上下界的边(ss,i,(0,m),0),(i',t,(0,m),0),表示从任意点开始和结束 连(i,j,(0,m),d[i][j]),表示可以买票飞过去 连(i,i',(v[i],v[i]),0 ...

随机推荐

  1. Jmeter测试接口

    文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对Http接 ...

  2. DateTime?转化为DateTime,int? 转 int

    深入理解C#---1.可空类型 https://blog.csdn.net/tianzeyu1992/article/details/52618131 原文:https://blog.csdn.net ...

  3. VS2010 AnkhSvn

    有时候打开别的项目用的是 TFS等 造成 VS本来用的AnkhSvn失效了 .工具---选项----插件选择---

  4. Luogu P1137 旅行计划 【拓扑排序+Dp】By cellur925

    题目传送门 由于满足游览先后顺序从西到东的性质,我们很自然的想到用拓扑排序处理出一个合理的游览顺序. 然鹅,之后呢? 事实上,拓扑排序常与Dp相结合,解决后效性.我们就可以在每次拓扑入队的时候更新答案 ...

  5. [转]Boosting

    1 Boosting算法的起源 Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数.Boosting是一种提高任意给定 ...

  6. JetSpeed2部署至Apusic操作步骤记录

    JetSpeed2部署至Apusic操作步骤记录. 1.创建Apusic新域,配置端口.管理端口和管理密码. 2.将Tomcat/lib目录中的所有jar包复制至Apusic域中的lib目录中(包括数 ...

  7. 移动web开发基础(一)——像素

    这篇文章要弄清楚2个问题:一.什么是逻辑像素和物理像素:二.这两者有什么关系. 对于问题一,先抛出两个概念.我们经常使用的px就是逻辑像素,是浏览器使用的抽象单位:物理像素又和dp/pt(设备无关像素 ...

  8. 好用的SqlParamterList

    public class SqlParameterList : List<SqlParameter> { #region Properties /// <summary> // ...

  9. AJPFX简述可变参数概述和使用

    A:可变参数概述 定义方法的时候不知道该定义多少个参数 B:格式 修饰符 返回值类型 方法名(数据类型… 变量名){} C:注意事项: 这里的变量其实是一个数组 如果一个方法有可变参数,并且有多个参数 ...

  10. win7电脑删除文件时一直提示文件正在被另一个程序占用

    这样的情况并非是第一次遇到了,以前总是会觉得这样的问题只是电脑的错乱,重启一下电脑就好了,但是并非每次都需要重启电脑的,其实简单的设置一下,这个问题就可以解决了.对了,咱们还是说说这到底是个什么问题吧 ...