https://darkbzoj.cf/problem/2055

https://blog.csdn.net/Clove_unique/article/details/54864211 ←对有上下界费用流的处理方法

首先建立附加源汇ss,tt 
对于原图里有的一条边x->y,[l,r],cost,变成x->y,r-l,cost 
每一个点的权di定义为所有流入这个点的边的下界和-所有流出这个点的边的下界和 
对于一个点i,若di>0,ss->i,di,0;若di<0,i->tt,-di,0 
连边t->s,inf,0 
然后对ss,tt做最小费用最大流 
最终的费用为(网络流中计算的费用+原图中有费用的边的下界*这条边的费用)

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
const int minf=;
int n,m,S,T,SS,mx,ans;
struct nod{
int x,y,v,co,rev,next;
}e[maxn*maxn];
int head[maxn]={},tot=;
int dis[maxn]={},fa[maxn]={},vis[maxn]={};
inline void init(int x,int y,int v,int co){
e[++tot].x=x;e[tot].y=y;e[tot].v=v;e[tot].co=co;e[tot].rev=tot+;e[tot].next=head[x];head[x]=tot;
e[++tot].x=y;e[tot].y=x;e[tot].v=;e[tot].co=-co;e[tot].rev=tot-;e[tot].next=head[y];head[y]=tot;
}
queue<int>q;
inline bool SPFA(){
memset(dis,,sizeof(dis));
memset(fa,,sizeof(fa));
mx=dis[];
q.push(S);dis[S]=;
while(!q.empty()){
int x=q.front();q.pop();vis[x]=;
for(int i=head[x];i;i=e[i].next){
int y=e[i].y;
if((!e[i].v)||dis[y]<=e[i].co+dis[x])continue;
dis[y]=e[i].co+dis[x];fa[y]=i;
if(!vis[y]){
q.push(y);vis[y]=;
}
}
}
return dis[T]!=mx;
}
inline void doit(){
int val=mx;
for(int i=fa[T];i;i=fa[e[i].x])val=min(val,e[i].v);
for(int i=fa[T];i;i=fa[e[i].x]){e[i].v-=val; e[e[i].rev].v+=val; ans+=e[i].co*val;}
}
int main(){
int x;
scanf("%d%d",&n,&m);S=n*+;T=S+;SS=T+;
for(int i=;i<=n;i++){
scanf("%d",&x);
if(x<=)continue;
init(i,i+n,,);
init(S,i+n,x,); init(i,T,x,);
}
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
scanf("%d",&x);if(x!=-)init(i+n,j,minf,x);
}
}
init(S,SS,m,);
for(int i=;i<=n;i++) init(SS,i,minf,);
ans=;
while(SPFA())doit();
printf("%d\n",ans);
return ;
}

BZOJ2055 80人环游世界 网络流 费用流 有源汇有上下界的费用流的更多相关文章

  1. [bzoj2055]80人环游世界[网络流,上下界网络流]

    手动画了整张图,,算是搞懂了吧,, #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; templat ...

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

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

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

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

  4. BZOJ2055: 80人环游世界

    题解: 总算A掉了,各种蛋疼... int main() { freopen("input.txt","r",stdin); freopen("out ...

  5. zoj3229 Shoot the Bullet(有源汇有上下界的最大流)

    题意: 一个屌丝给m个女神拍照,计划拍照n天,每一天屌丝给给定的C个女神拍照,每天拍照数不能超过D张,而且给每个女神i拍照有数量限制[Li,Ri],对于每个女神n天的拍照总和不能少于Gi,如果有解求屌 ...

  6. zoj 3229 有源汇有上下界的最大流模板题

    /*坑啊,pe的程序在zoj上原来是wa. 题目大意:一个屌丝给m个女神拍照.计划拍照n天,每一天屌丝最多个C个女神拍照,每天拍照数不能超过D张,并且给每一个女神i拍照有数量限制[Li,Ri], 对于 ...

  7. Shoot the Bullet ZOJ - 3229 有源汇有上下界的最大流

    /** zoj提交评判不了,所以不知道代码正不正确.思路是应该没问题的.如果有不对的地方,请多指教. 题目:Shoot the Bullet ZOJ - 3229 链接:https://vjudge. ...

  8. 【上下界网络流 费用流】bzoj2055: 80人环游世界

    EK费用流居然写错了…… Description     想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么     一个80人的团 ...

  9. bzoj千题计划159:bzoj2055: 80人环游世界(有源汇上下界可行最小费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2055 某个国家必须经过vi次, 可以转化为上下界都为vi的边 对这张图做有源汇上下界可行最小费用流 ...

随机推荐

  1. [转]QVector与QByteArray——Qt的写时复制(copy on write)技术

    我们在之前的博文QVector的内存分配策略与再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值中简单聊了聊QVector内存分配和赋值方面的一点东西,今天接 ...

  2. oracle关键字作为字段名使用方法

    有时我们在定义字段名及别名时所用名与oracle关键字同名,这时该如何处理呢? 其实很简单,只要在此关键字加上"",如"group" SQL> DROP ...

  3. python基础之命名空间

    前言 命名空间通俗的理解就是对象或变量的作用范围,在python中分为局部命令空间.模块命名空间和build-in全局命名空间. 局部命名空间 局部命名空间即在一个函数或一个类中起作用的变量或引用的字 ...

  4. skb_pull skb_push skb_put

    unsigned char *skb_pull(struct sk_buff *skb, int len)该函数将 data 指针向数据区的末尾移动,减少了len 字段的长度.该函数可用于从接收到的数 ...

  5. C#利用System.Net发送邮件

    啥也不说了,直接上干货 using System.Net.Mail;using System.Net; //使用发送邮件的邮箱 var emailAcount = "826217795@qq ...

  6. C/C++杂记:运行时类型识别(RTTI)与动态类型转换原理

    运行时类型识别(RTTI)的引入有三个作用: 配合typeid操作符的实现: 实现异常处理中catch的匹配过程: 实现动态类型转换dynamic_cast. 1. typeid操作符的实现 1.1. ...

  7. ubuntu使用百度云盘插件

    Firefox 插件地址 https://addons.mozilla.org/zh-CN/firefox/addon/baidu-pan-exporter/ 安装后重启Firefox,然后百度云下载 ...

  8. poj1976

    dp #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ...

  9. 创建第一个MySQL数据库earth及表area

    Windows 10家庭中文版,MySQL 5.7.20 for Win 64,2018-05-08 数据库earth描述: 用于记录地球上的事物,一期包含地理区域信息——表area. 字符集编码:u ...

  10. win、mac系统配置本地电脑ip为域名教程

    win系统: 如何修改hosts文件 主机文件原内容如下: #Copyright(c)1993-2009 Microsoft Corp. # #这是Windows的Microsoft TCP / IP ...