2055: 80人环游世界

题意:n个点带权图,选出m条路径,每个点经过val[i]次,求最小花费


建图比较简单
s拆点限制流量m
一个点拆成两个,限制流量val[i],需要用上下界
图中有边的连边,容量INF权值为花费
上下界最小费用流
那些容量为0的边不加也可以

该死我把费用流的加边打错了查了一会...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define fir first
#define sec second
typedef long long ll;
const int N=1005, M=4e5+5, INF=1e9;
inline ll read(){char c=getchar();ll x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}int n, m, s, s0, t, tot, extra[N], x;
struct edge{int v, c, f, w, ne, lower;}e[M];
int cnt=1, h[N];
inline void ins(int u, int v, int c, int w=0, int lower=0) {e[++cnt] = (edge){v, c, 0, w, h[u], lower}; h[u]=cnt;e[++cnt] = (edge){u, 0, 0, -w, h[v], lower}; h[v]=cnt;
}
int q[N], head, tail, d[N], inq[N];
pair<int, int> pre[N];
inline void lop(int &x) {if(x==N) x=1;}
bool spfa(int s, int t) {memset(inq, 0, sizeof(inq));memset(d, 127, sizeof(d));head=tail=1;q[tail++]=s; d[s]=0; inq[s]=1;pre[t].fir = -1;while(head!=tail) {int u=q[head++]; inq[u]=0; lop(head);for(int i=h[u];i;i=e[i].ne) {int v=e[i].v;if(e[i].c > e[i].f && d[v]>d[u]+e[i].w) {d[v]=d[u]+e[i].w;pre[v] = make_pair(u, i);if(!inq[v]) q[tail++]=v, inq[v]=1, lop(tail);}}}return pre[t].fir != -1;
}
int ek(int s, int t) {int flow=0, cost=0, x;while(spfa(s, t)) { int f=INF;for(int i=t; i!=s; i=pre[i].fir) f=min(f, e[pre[i].sec].c - e[pre[i].sec].f);flow+=f; cost+=f*d[t];//printf("f %d %d\n",f,d[t]);for(int i=t; i!=s; i=pre[i].fir) x=pre[i].sec, e[x].f+=f, e[x^1].f-=f;}//printf("ek %d %d\n",flow,cost);return cost;
}int main() {freopen("in","r",stdin);n=read(); m=read(); s0=0; s=n+n+1; t=n+n+2;ins(s0, s, 0, 0, m);extra[s0]-=m, extra[s]+=m;for(int i=1; i<=n; i++) {x=read();ins(s, i, INF); ins(i+n, t, INF);ins(i, i+n, 0, 0, x);extra[i]-=x, extra[i+n]+=x;}for(int i=1; i<=n; i++)for(int j=i+1; j<=n; j++) {int val=read();if(val!=-1) ins(i+n, j, INF, val, 0);}int ss=t+1, tt=t+2, sum=0; tot=tt;for(int i=s0; i<=t; i++) {if(extra[i]>0) ins(ss, i, extra[i]), sum+=extra[i];if(extra[i]<0) ins(i, tt, -extra[i]);}ins(t, s0, INF);int ans=ek(ss, tt);printf("%d", ans);
}

BZOJ 2055: 80人环游世界 [上下界费用流]相关推荐

  1. [bzoj2055]80人环游世界 上下界费用流

    2055: 80人环游世界 Time Limit: 10 Sec   Memory Limit: 64 MB [ Submit][ Status][ Discuss] Description 想必大家 ...

  2. BZOJ 2055: 80人环游世界 有源汇上下界费用流

    2055: 80人环游世界 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 568  Solved: 347 [Submit][Status][Disc ...

  3. 2055: 80人环游世界

    2055: 80人环游世界 Time Limit: 10 Sec   Memory Limit: 64 MB Submit: 366   Solved: 232 [ Submit][ Status][ ...

  4. 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流

    原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...

  5. 【BZOJ3876】[Ahoi2014]支线剧情 有上下界费用流

    [BZOJ3876][Ahoi2014]支线剧情 Description [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩 ...

  6. 有源汇上下界最小费用可行流 ---- P4553 80人环游世界(拆点 + 有源汇上下界最小费用可行流)

    题目链接 题目大意: 解题思路: 又是一道裸题 . 首先它要求第iii个点只经过ViViVi那么我们就拆点ai,ai+na_i,a_{i+n}ai​,ai+n​一个点为入点,一个为出点这条边的流量范围 ...

  7. BZOJ2055 80人环游世界

    上下界最小费用流 限制点访问量->拆点[i,i'] 建图: 1.s->S [m,m] 0 2.S->i [0,inf] 0 i'->t [0,inf] 0 3.i'-j [0, ...

  8. UVALive7670 Asa's Chess Problem,上下界费用流,另类解法

    Asa's Chess Problem 先阐述一下带上下界的边怎么建. 带上下界的建图方法 设我要建一条边(u→v)(u\rightarrow v)(u→v),流量上界为upupup,下界为downd ...

  9. 【BZOJ4108】[Wf2015]Catering 有上下界费用流

    [BZOJ4108][Wf2015]Catering Description 有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些 ...

最新文章

  1. 这样讲 SpringBoot 自动配置原理,你应该能明白了吧
  2. Enlightenment E19 将完整支持 Wayland
  3. python常用内置模块-Python之OS模块常用内置方法汇总
  4. 记一次笑哭的unterminated string literal报错
  5. 浏览器接收响应数据过大_DOM总结:数据通信(HTTP协议和Ajax)
  6. Linux 查看盘结构命令
  7. Nginx服务器的压缩功能和缓存功能
  8. Bailian2933 停车场收费【水题】
  9. TCP/IP协议栈的封装
  10. alibaba/Sentinel 分布式 系统流量防卫兵
  11. gulp报错task function must be specified
  12. C++ string类成员函数
  13. 《批创思维导论》网课章节测验及答案
  14. 升级版4850竖曲线
  15. matlab茎叶图命令,[转载]转载:Stata命令(转自人大论坛)
  16. 在python中、int表示的数据类型是_python--002--数据类型(int、str)
  17. stm32cubemx配置pwm
  18. 手机信号上的G、E、O、3G、H、H+是什么意思?
  19. 品牌的价值 龚文祥的第六次跳槽
  20. 让自己的网站实现在线编辑office文档

热门文章

  1. python中国大学排名爬虫写明详细步骤-Python之爬虫-中国大学排名
  2. python怎么安装包-如何给自己的Python项目制作安装包
  3. Linux中使用gcp拷贝报错:dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported:
  4. 在Jetson Xavier NX上安装pycuda报错:src/cpp/cuda.hpp:14:10: fatal error: cuda.h: No such file or directory
  5. xml介绍与解析,及xml库包使用
  6. hduoj4092 Yummy Triangular Pizza(打表)
  7. QTableView中点击单元格弹出QComboBox
  8. hdu1715 大菲波数
  9. mysql only_full_group_by报错的问题(转)
  10. Python操作Rabbit MQ的5种模式